EXTO迁移会自动在表中按名称“id”创建一个自动递增字段
如何避免创建此字段
如何将表中的另一列设置为主键(非自动递增)
您可以使用主键:false选项退出自动生成的主键列,以表/2。您可以使用主键:true选项将另一列设置为主键添加/3:
create table(:users, primary_key: false) do
add :my_id, :integer, primary_key: true
add :name, :string
# ...
end
有关更多信息,请
标签: Elixir
http-proxyelixir-mix
至少在两周前,我一直在使用代理后的mix。
然而我昨天发现,在代理之后,混合变得无法工作。
混合版本是1.1.1。
混合本地.hex运行。
但是mix deps.get会出现错误
$ mix deps.get
Registry update failed (http_error)
{:failed_connect, [{:to_address, {'s3.amazonaws.com', 443}}, {:inet, [:inet], :nxdomain}]}
Running dependency
标签: Elixir
channelphoenix-framework
有没有办法从频道外部向频道广播消息
可能类似于频道。广播主题、事件、数据
我看到了类似的内容,但最终版本的Phoenix.Channel.broadcast/3(从今天起)使用了一个套接字,表示频道和主题。您可以使用MyApp.Endpoint.broadcast(主题、事件、消息)
检查注意:如果您是从iex运行此应用程序,则需要使用iex-S mix phoenix.server启动应用程序才能运行。这可能是我自己应该发现的:-)。。。我很努力地在谷歌上搜索,但这件事没有出现。也许它现在在这
我需要生成一个与以下格式相同的当前时间字符串:20130524000000z
该示例是2013年5月24日星期五00:00:00 GMT的时间戳
我该怎么做?有没有一种方法可以在没有外部软件包的情况下完成这项工作?我已经成功地使用了以下代码:
{{yy, mm, dd}, {hh, mi, ss}} = :calendar.universal_time
"~.4.0w~.2.0w~.2.0wT~.2.0w~.2.0w~.2.0wZ"
|> :io_lib.format([yy, mm, d
我试图围绕ETS实现一个非常简单的示例,但没有取得多大成功。我想让多个worker进程写入ETS表,然后让一个(不同的)读卡器进程定期检索值作为总和。我似乎无法在没有崩溃的情况下插入到表中,而读取器在执行时返回零…这是我的代码,非常感谢收到的任何帮助:
主管模块:
defmodule Stackex do
use Application
@noOfWriters 1
def start(_type, _args) do
import Supervisor.Spec, wa
根据文档,Plug.Conn.register\u before\u send注册在发送请求之前调用的回调。以下代码仅打印“设置”消息,而不打印“清理”
我从医生那里漏掉了什么吗?为了使这项工作正常进行,设置是什么?提前谢谢 您是对的,但是您没有使用注册了before_send的conn(不要忘记变量在Elixir中是不可变的)
更改:
Plug.Conn.register_before_send(conn, fn conn ->
致:
或者重写函数,以便在返回发送之前从寄存器返回的c
我在试着理解长生不老药流。
首先,我有一个列表,它遍历一个范围并乘以2
iex(5)> stream = 1..3 |>
...(5)> Enum.map(&IO.inspect(&1)) |>
...(5)> Enum.map(&(&1 * 2)) |>
...(5)> Enum.map(&IO.inspect(&1)) |>
...(5)> Enum.reduce(4,
假设我有一个函数的模块,它的头具有不同的算术性。是否有方法将此函数导入其他模块中,以获得所有可用的算术数(而不显式)
据我所知,长生不老药没有这样的功能
有关更多详细信息,请参阅
编辑:
@tkowal在上面的评论中提出了一个很好的观点。如果您试图对变量整数列表求和,正确的方法是将参数作为整数列表传递,然后使用它。像这样:
defmodule T do
def plus(l) when is_list(l), do: plus(l,0)
defp plus([], acc), do:
我找到了一个简单的例子,说明了我在学习长生不老药时遇到的一个问题
我写了一个脚本:
defmodule P do
defstruct a: 2
def geta(%P{a: a}), do: a
end
使用iex“filename”启动iex会话,检查它是否与p.geta(%p{a:42})一起工作
然后我将文件更改为
defmodule P do
defstruct a: 2, b: 4
def getb(%P{a: a, b: b}), do: b
end
当我启动ie
是否可以像meck在Erlang中提供此功能一样,使用ExUnit mock模拟返回值序列
...
meck:new(my_module),
meck:sequence(my_module, method, 1, [Response1, Response2]),
meck:unload(module),
...
如果没有,是否可以在同一个单元测试ExUnit Elixir模块中成功地结合meck和mock?中没有提到:meck.sequence,因此我猜这还不受支持
直接调用:meck函数应该
String.split在iex控制台上运行时返回数组。但在Phoenix上,它将从结果中删除拆分分隔符:
iex控制台上的结果
err = "a,b,c,d"
res = String.split(err,",")
output:["a", "b", "c", "d"]
凤凰城的比赛结果
keys="a,b,c,d"
arrkeys1 = String.split(keys,",")
output:abcd
您在Phoenix中看到的是对IO.puts/1的隐
我正在通过管道操作符发送一个列表,并希望对单个元素执行一些操作。但不知道如何访问每个元素。这里有一个例子
[1,[[2],3]] |> List.flatten |> how do I multiply each element with 2
[1,[[2],3]] |> List.flatten |> &(&1 * 2) #=> error...can only pipe into local calls
尝试了其他几种不起作用的变体。我错过了
我正在努力学习长生不老药,我想知道什么时候开始
如果我有一个结构,当sayis\u member为true且level大于10时,我想做些什么,我该如何处理
def allow_entry(%Player{ is_member: is_member, level: level })
when ((the conditions above))
当用于任何类型的布尔表达式时,与Elixir中的任何其他模式匹配都没有区别
defmodule Player do
defstruct is_me
我试图查找所有用户在其匹配历史记录字段中没有特定字符串元素的用户。我猜是这样的:
matched_user=user |>其中([u],^device_id不在u.match_历史记录中)|>limit(1)|>VideoChat.Repo.one
但它似乎在部分破裂,而不是在部分破裂。有办法吗?试试看
User |>其中([u],而不是u.match_历史中的^device_id)
适用于那些正在寻找“数组不包含任何”行为的人。
例如,“匹配_历史记录不包含设备_1设备_2、设备_3”
如果您
我通常会看到处理受监控流程出口的代码如下所示的流程监控示例:
handle_info({:DOWN, ref, :process, pid}, state)
但我也看到过一些例子,它们匹配的是:EXIT,而不是:DOWN消息
到目前为止,在我自己的示例中,我只能触发:DOWN消息,其中包括标准的Process.exit和GenServer.stop消息,以及在监视的进程中引发异常
我什么时候会收到:EXIT消息?:EXIT被发送到另一个进程试图使用进程退出的进程。EXIT(原因不是:kill)
如果我有字符串“ugguguuauaaugguuu”如何将其转换为一个列表,每3个字符将其拆分为[“UGG”、“UGU”、“UAU”、“UAA”、“UGG”、“uu”]
我还想知道是否有更优雅的版本这可以使用Stream.unfold/2功能实现。在某种程度上,它与reduce相反-reduce允许我们将集合折叠为单个值,而“展开”是指将单个值扩展为集合
作为Stream.unfold/2的生成器,我们需要一个返回元组的函数——第一个元素是生成集合的下一个成员,第二个元素是要传递到下一次迭代的累
我对Elixir比较陌生,我注意到一些奇怪的事情,我有一个配置,config.exs
哪条线像
config :my_app, myname: "name"
当我更改myname键的值时,我的应用程序的行为就像该值仍然是“name”一样,但如果我确实混合清理然后编译我的应用程序,它会对新值作出反应,我环顾四周,查看配置文件是如何处理的,但我似乎找不到任何解释为什么我必须对我的应用程序进行清理才能对更改作出反应的方法
编辑:此应用程序是伞形项目的一部分,我正在更改应用程序的配置,而不是伞形配置.
我有两张单子
1=[%{name:“hi”},%{name:“hu”}]
2=[%{name:“hi”},%{name:“ha”}]
现在我想有两个列表,其中只包含列表1和列表2中唯一的元素
1_uniq=[%{name:“hu”}]
2_uniq=[%{name:“ha”}]
如何实现这一点?您可以为两个列表创建一组名称列表,将它们相交以查找通用名称,然后过滤掉所有通用名称。以下是如何使用Elixir中的MapSet模块执行此操作:
l1 = [%{name: "hi"}, %{nam
我在Phoenix应用程序控制器中执行以下操作:
defmodule TattooBackend.Web.API.V1.TokenController do
use TattooBackend.Web, :controller
alias TattooBackend.Accounts.Account
alias TattooBackend.Repo
alias TattooBackend.Web.Endpoint
alias Comeonin.Bcrypt
alias
当直接使用phoenix pubs时,是否有办法订阅部分匹配的主题,例如“用户:”
为了便于说明,以下代码:
Phoenix.PubSub.subscribe("my_pubsub", "user:*")
应匹配所有以下事件:
Phoenix.PubSub.broadcast("my_pubsub", "user:123", "banana")
Phoenix.PubSub.broadcast("my_pubsub", "user:911", "apple")
Phoenix.PubSub.b
我有一个元组列表,格式为{:task,function\u name,description},我想生成一个函数,调用元组中定义的函数来覆盖一个值
我生成的函数应该如下所示:
def run(val) do
val = do_something(val)
val = do_something_else(val)
...
val
end
这是我目前的代码:
defmacro __before_compile__(env) do
steps = Module.ge
标签: Elixir
phoenix-frameworkecto
我有一个Phoenix应用程序,它有很多关联。在此应用程序中:
我有一个用户表:
schema "users" do
field :username, :string
many_to_many :organizations, Organization, join_through: "memberships"
end
和一个组织表:
schema "organization" do
field :org_name, :string
many_to_many :members, U
我想在elixir应用程序的测试中使用一个依赖项的测试目录中的模块。我想知道是否有办法做到这一点。多谢各位
我尝试了导入,这给了我一个编译错误elixir模块未加载且找不到您可以将依赖项的测试文件夹的路径添加到elixirc\u路径配置中的mix.exs。由于您正在使用Phoenix,因此已经为elixirc_路径的test环境提供了一条自定义规则,如下所示:
defp elixirc_paths(:test), do: ["lib", "test/support"]
您只需将依赖项的test
我正在关注phoenix的一本书,并构建了一个用于以上几个后端的代理:
# Proxy
defmodule Rumbl.InfoSys do
# we will have several backends; wolfram, google search, google pictures, etc
@backends [Rumbl.InfoSys.WolFram]
defmodule Result do
defstruct score: 0, text: nil, url:
在Rails中,我们可以动态连接多个数据库
ActiveRecord::Base.establish_connection(
database: "db_name", username: "postgres")
但是在Elixir-Phoenix框架中,如何执行相同的过程。使用Mix.Config
配置:我的应用程序,MyApp.OneRepo,
适配器:exto.Adapters.MySQL,
数据库:“遗留数据库”,
用户名:“用户名”,
密码:“密码”,
主机名:“something
如果我有一个这样的原子列表
[:slug, :title]
如何将值分配给列表中的原子(如元组)
[{:slug, "some"}, {:title, "title"}]
可能吗
谢谢 您必须遍历列表以查找和更新值。以下是使用for的方法:
defmodule A do
def assoc(xs, key, value) do
for x <- xs, do: if(x == key, do: {x, value}, else: x)
end
end
[:slug,
标签: Elixir
phoenix-frameworkfakes3
我正在用fakeS3测试S3连接,它工作得非常好。唯一的缺点是每次运行测试之前我都必须运行假的S3服务器,否则S3测试将明显中断
我想在测试运行之前找出运行此命令的方法:
fakes3-r~/.s3bucket-p4567
理论上,这将启动Sinatra服务器,以便S3测试能够通过,但我不需要每次都启动单独的服务器
我已经试过了,但没有成功,原因是:
MIX.exs
这不起作用,因为它不是混合任务
我也可能是想错了。如何在测试之前运行该命令?这是解决此问题的正确方法吗?只需使用:
def fak
我目前正在尝试测试凤凰城项目中的控制器
我有一个相当复杂的身份验证插件(我单独测试)。我不想为所有控制器测试提供有效凭据
运行测试时是否有跳过某些插头的方法
我尝试了绕过(conn,MyAppWeb.Router,[]),但这似乎根本没有影响到控制器的功能。最简单的方法可能是在应用程序代码中这样做:
if Mix.env != "test" do
plug MyAuthenticationPlug
end
然后在测试期间,您的插件将不会被编译。在测试中绕过身份验证逻辑的一个技巧是直接为连接
标签: Elixir
phoenix-frameworkecto
我正在尝试向Phoenix应用程序添加一个replicate函数,它接受一个Page对象和一个owner\u id,并创建一个新的页面,该页面具有相同的字段,但由其他人拥有。现在看起来是这样的:
def duplicate(%Page{} = page, new_owner_id) when is_integer(new_owner_id) do
page
|> Page.changeset(%{owner_id: new_owner_id})
|> Re
标签: Elixir
phoenix-frameworkstripe.jsstripe-elixir
我使用此软件包将Stripe整合到phoenix应用程序中:
我正在尝试创建一个订阅计划的客户
defmodule StripeTestWeb.PaymentController do
use StripeTestWeb, :controller
use Stripe.API
def index(conn, %{"stripeEmail" => email} = _params) do
{:ok, customer_data} = Stripe.Customer.
查看ExUnit文档,您可以使用以下模式将属性添加到上下文结构中:
defmodule KVTest do
use ExUnit.Case
setup do
{:ok, pid} = KV.start_link
{:ok, pid: pid}
# "[pid: pid]" also appears to work...
end
test "stores key-value pairs", context do
assert KV.put(con
这段代码过去是有效的,能够根据不同的子句将自定义消息放入消息中,并将这些消息发送回前端
我更新了长生不老药。现在,消息在返回前端时总是{}。我现在需要做什么才能让这段旧代码将消息附加到messages?它会附加它们,我会马上检查,它们会在那里。但最后,里面什么都没有
我的所有其他代码仍然有效,只是消息不再向前端返回任何内容,因为它在函数结束时变为空。这就像iff中的变量范围不一样,它是一个完全不同的变量
defmodule Api.Controllers.PutProductIsVegan do
我有两种疑问。两者使用相同的视图。
返回最新的游戏JSON。
另一个返回所有游戏
看法
它起作用了。并返回JSON
def latest_game do
query = from g in Game,
order_by: [desc: g.game_date, desc: g.game_time],
preload: [:away_team, :home_team]
query
|> first(:game_d
我不知道如何匹配异步函数和句柄信息
此代码适用于:
def order_month() do
Task.async(fn ->
(1..12)
|> Enum.map(fn a -> %{months: a} |> Map.put(:order_months, Proyect.BuyHandler.order_month(a |> Integer.to_string())
|> Enum.map(fn m ->
我有一个配置,我想把布尔变量和整数变量作为env传递
BOOLEAN_VARIABLE=false
INTEGER_VARIABLE=5000
如果找不到给定的env变量,我还需要设置默认配置。
这里我将boolean_变量的默认值设置为true,而integer_变量的默认值为2000
boolean_variable =
case System.get_env("BOOLEAN_VARIABLE") do
"false" -> fa
标签: Elixir
phoenix-frameworkecto
我有一个在称为表单的模式上工作的控制器。此架构与用户有关联。
当我让测试运行时,我现在得到一个错误,即数据无法保存到数据库中,因为夹具中id为的用户不存在。
现在我在思考如何解决这个问题。我可以向数据库中写入一个用户,并确保始终存在一个有效的用户,或者模拟该用户,我猜。
这样做的“规范”方式是什么?如果我要在数据库中创建用户,我将不得不(几乎)为其他所有模式都这样做,那么如何才能使其干燥呢?视情况而定。如果您有很多查询要测试,并且关系复杂,那么就有。这样做的唯一缺点是您必须在每个测试用例上填充数
我是新的长生不老药,我想学习如何调试更好
在我工作的地方,对大型数据集执行操作是很常见的。这意味着在最后一次操作之前,流一直被大量使用,通常是Enum.sum()
但不幸的是,这意味着几个调用看起来无法识别,因为它们由几个未记录的Stream.map函数组成。(我们目前正在解决这个问题)。我希望看到数据从一个流传递到另一个流进行调试时的状态。这通常是如何实现的
例如:
SomeModule.some_large_call_that_returns_a_stream()
|> Stream.
任务是使用Elixir将结构的HashDict保存并从文件中加载。我计划迭代HashDict并在文件的每一行上写出一个结构。
然而,我在谷歌上找不到关于如何将结构或Dict保存到文件的任何信息。特别是,是否有一种内置的方式来序列化Dicts
我试着先转换成字符串。iex代码段:-
iex(68)> {:ok,of} = File.open("ztest.txt", [:write, :utf8])
{:ok, #PID<0.232.0>}
iex(69)> IO.writ
我刚刚开始使用长生不老药,并且开始了一个凤凰城项目,我非常喜欢这个项目。
现在有了rails的背景,我习惯了被调试工具宠坏,比如“debugger”、“byebug”等等;我想知道有没有类似的长生不老药工具?你们是如何调试Elixir应用程序的
即使是一个相当于Rubys的提升我的对象。inspect,也会创造奇迹
谢谢您可以使用IEx
require IEx
value = {:some, :erlang, :value}
IEx.pry
如果您使用例如iex-s program.exs(
在我的Phoenix应用程序中,我有一个数据格式化功能,我希望我的所有控制器都可以访问该功能-
def prettify({message, values}) do
Enum.reduce values, message, fn {k, v}, acc ->
String.replace(acc, "%{#{k}}", to_string(v))
end
end
Phoenix应用程序的文件结构中应该包括哪些全局可访问的功能,以及如何调用这些功能?我通常为
标签: Elixir
phoenix-frameworkelixir-mix
我想要的是一些关于如何调试mix phoenix.server
当我运行命令时,没有输出,它挂起(没有完成并显示cmd提示符)。我试过:
IEx -S mix phoenix.server
这开启了长生不老药治疗,但此时我不确定下一步该怎么做。我希望看到一些详细的东西,告诉我服务器启动的具体位置。我试过:
mix phoenix.server --verbose
当然,这是行不通的。此时此刻,我正在努力找出正确的方法。尝试修改dev.exs文件,并将记录器级别设置为debug。在代码中,您
我正在阅读长生不老药文档,我遇到了长生不老药列表模块的“foldr”函数。我真的很难理解它。医生说:
文件
所以这个应该返回-2。但是当我读到它的时候,我似乎认为它每次都在试图用0减去一个数字,如果是这样的话,我们怎么得到-2呢?我显然不懂蓄电池,有人能帮我把它拆了吗
使用函数从右侧折叠(减少)给定列表。需要一个累加器
这意味着列表是从右边迭代的,例如。G传递的函数按以下顺序调用4次:
fn(4, 0) -> 4 - 0 end
fn(3, 4) -> 3 - 4 end
fn(2,
我的模块中有以下结构列表:
defmodule团队做什么
defstruct名称:nil,点:nil
结束
team1=%Team{name:“team1”,分数:“00”}
team2=%Team{name:“team2”,分数:“50”}
team3=%Team{name:“team3”,分数:“25”}
team4=%Team{name:“team4”,分数:“12”}
team5=%Team{name:“team5”,分数:“04”}
team6=%Team{name:“Team 6”,
标签: Elixir
phoenix-frameworkecto
因此,在使用preload函数进行查询时,使用order\u by时遇到问题
通常我使用order\u by就像在这个list\u成员函数中一样
列出成员
def list_members() do
query =
from(
p in Member,
select: p,
order_by: [desc: p.inserted_at], # descending order
preload: [:avatar]
)
Repo.all(query)
en
标签: Elixir
phoenix-frameworkecto
在EXTO模式中,可以使用@primary\u key属性指定自动生成的主键:
@primary_key {:id, :binary_id, autogenerate: true}
有没有办法指定一个自定义函数来自动生成?我相信在这种情况下,它将使用exto.UUID.generate,而我希望使用v1 UUID。根据,您可以创建自己的自定义主键
下面是一个将name设置为主键的快速示例:
假设我们使用以下混合任务生成了一个Player表:
mix phoenix.gen.json播放器名称:
标签: Elixir
phoenix-frameworkdialyzer
我开始在基于Phoenix 1.4的伞形项目中使用透析器(dialyxir 1.0.0-rc.6)
当我第一次在上面运行混血透析器时,我得到了这个警告
apps/my_app/lib/my_app_web/gettext.ex:1:pattern_match_cov
The pattern
%{}
can never match since previous clauses completely cover the type
%{:count => _, _ => _}
以下是此
我们在docker中使用ejabberd,从docker的官方形象开始。此docker映像能够使用模块\源文件夹中的自定义插件。我改变了Dockerfile中的编译选项,加入了elixir,现在是简单的“Hallo world”插件
但是,我想包括外部依赖,具体来说,它管理向iOS/Android设备发送推送通知。我不知道,如何使它正确的方式。我试图将鸽子源代码复制到插件目录中的/deps文件夹,并下载所有依赖项(如mix deps.get)。然而,我不知道如何为鸽子提供配置,这通常是在Conf
今天在浏览一些代码时,我遇到了以下两个函数头,并意识到,据我所知,它们应该是重复的。相同数量的参数,没有匹配项或保护,让我们绕过第一个。但是编译器没有警告我第二个永远不会匹配。有什么解释吗
def update_display_cache(context, text, line_no, position, text, adjusted_text, _) do
def update_display_cache(context, display_line, line_no, position
因此,作为Elixir lang的新手,我对变量两边的:(冒号)完全感到困惑
:status是一个原子,但我们也可以在映射或结构之类的东西中找到:
%{
kkey: "success"
}
kkey是原子吗?如果是这样的话,这与声明atom的标准方式有什么不同
另一个说明这一点的示例:
IO.inspect(some_variable, label: "value of some_variable")
在本例中,label:是否被视为atom
标签: Elixir
phoenix-frameworkphoenix-channels
我有基于的完美工作的频道,我的应用程序正在按预期接收和重新广播消息:
以下是处理该频道的代码:
defmodule HelloWeb.RoomChannel do
use Phoenix.Channel
def join("room:lobby", _message, socket) do
{:ok, socket}
end
def join("room:" <> _private_room_id, _params,
上一页 1 2 ...
36 37 38 39 40 41 42 ...
下一页 最后一页 共 125 页