我想测试一个使用Task.async
为了使我的测试通过,我需要在断言之前让它休眠100毫秒,否则测试进程在异步任务执行之前被终止
有更好的办法吗
已编辑,正在添加代码示例:
我想测试的代码(大致):
以及我已经编写的测试(仅在调用睡眠时使用)
由于这个问题有点模糊,我将在这里给出一般性的回答。通常的技术是监视进程并等待停机消息。大概是这样的:
task = Task.async(fn -> "foo" end)
ref = Process.monitor(task.pid)
asser
我有一个elixir应用程序,一个应用服务器,它将从启动参数中受益。这个应用程序使用了一个EXTO存储库,所以我可以在那里存储应用服务器的配置,但是我仍然需要一个配置密钥来从数据库中检索什么
目前,我一直在为服务器应用程序使用config.exs(整个应用程序是一个伞形项目),但显然这只处理一个静态配置
我的问题是:
我可以使用mix指定要使用的配置文件吗?我知道Mix库中有几个函数,但据我所知,它们都是应用程序启动后可以使用的函数。
同样,我可以使用mix来加载任何子应用程序的配置文件吗
谢谢
我有一个非常简单的Elixir代码示例,我想在不同的节点上运行
第一个节点在我的笔记本电脑上,第二个是Raspberry Pi,通过SSH访问
代码很简单:
# node1@my-computer
defmodule Hello do
def world, do: IO.puts "hello world"
end
# node2@raspberrypi
iex> Node.spawn_link :"node1@my-computer", fn -> Hello.world
我正在使用插头,我想了解
我的代码如下所示:
defmodule Numerino.Plug do
使用插头路由器
使用Plug.Debugger
plug:put_resp_content_type,“application/json”
插头:匹配
插头:调度
definit选项做什么
IO.inspect选项
选择权
结束
得到“/”做
康涅狄格州
|>检查
|>发送响应(201,“世界”)
结束
相配
发送响应(conn,404,“未找到”)
结束
结束
在get中,我需要使用选项作为参
标签: Elixir
phoenix-frameworkecto
当前的EXTO文档仅解释了当多态的注释可以同时属于任务和Post时,如何构建属于多态关联类型的。但是相反的方向呢
例如,有一个列表,它可以有四种类型的属性之一:房间,公寓,维拉或办公室
考虑到一对一的关系,鉴于上述示例,这意味着应该有房间/房源,公寓/房源,维拉/房源和办公室/房源,这是不可能的,因为这将导致与列表相关联的所有其他表的重复
问题是如何建立这种关系的模型 我认为最简单的建模方法是翻转关联的两侧,然后将room\u id等字段添加到listings表中:
defmodule List
标签: Elixir
phoenix-frameworkecto
在Rails中,AR可以运行如下查询:
current_user.articles # fetch all articles from current_user
SELECT * from articles where user_id = <user_id>;
有没有一种与“星外”相同的方法
articles = Repo.all(from a in assoc(current_user, :articles))
或者将文章预加载到用户中
current_user = Repo.
我试图根据网站的域获取其标识符,但在为其编写了一个插件之后,我遇到了一个问题,系统中的所有链接都返回根url内容
lib/myapp/plugs/request\u var.ex
defmodule Myapp.Plug.RequestVar do
import Plug.Conn
@doc false
def init(default), do: default
@doc false
def call(conn, router) do
host = conn.h
在a的包中,我需要一个函数来生成唯一的文档ID
此函数使用v18中不推荐使用的:erlang.now()
我寻求有关如何迁移的帮助,但没有成功
我的实际代码(简称):
我想到的最好的办法是:
defmodule MyModule_v18 do
use Bitwise, only_operators: true
Kernel.if Keyword.get(:erlang.module_info, :exports) |> Enum.any?(fn({:system_time, 1})
我想要执行一个(缓慢的)python脚本,我想要我的Elixir进程阻塞,直到它接收到脚本的所有输出
Elixir的System.cmd/3或Erlang的os:cmd/1是否保证同步?如果没有,是否有其他方法进行同步操作系统调用?
在目标操作系统的命令外壳中执行命令,捕获
命令的标准输出,并将此结果作为字符串返回。
此函数取代了以前的unix:cmd/1;在Unix上
它们是等价的
此命令是同步的。不确定。谢谢
我有一个遗留数据库,我正试图将其引入到EXTO中。其中有一个orders表,其中有一个order\u status\u id列顺序\状态\ id映射到旧系统中的一组常量
我希望MyApp.Orderstruct包含一个Order\u status字段,该字段具有一个自定义类型,可以将整数ID转换为有意义的原子。我已经使用了自定义类型,但我不知道如何将名为order\u status的字段映射到名为order\u status\u id的列
遗留系统仍然在线并使用数据库,因此更改DB模式不是一个选
如何睡眠/等待一秒钟
我能找到的最好的东西是这样的(在iex中):
但我的两次PUT都不会延迟。计时器使用毫秒而不是秒,更新为:
IO.puts "foo" ; :timer.sleep(1000); IO.puts "bar"
Erlang文档中的计时器文档:
暂停调用此函数的进程的时间量
毫秒,然后返回ok,或者如果
时间是无限的原子。当然,此函数不会返回
马上
由于Elixir 1.3,您可以使用:
Process.sleep(1000)
参数以毫秒为单位。计时器模块中有一些有用的帮助
元组的处理方式似乎不一致:
defmodule A do
defmacro a(x) do
IO.inspect x
quote do end
end
end
A.A{:A,:b}按预期打印{:A,:b},但A.A{:A}打印{:{},[line:2],:A]}宏以引用表达式的形式接收参数,在Elixir中,长度为2的元组表示为它们自己,其余元组表示为{:{},[value1,value2,…]:
iex(1)> Macro.escape {}
{:{}, [],
我的长生不老药有以下价值:
二进制文件似乎不可枚举。我需要把它转换成一个列表,这样我就可以逐字节地对它进行迭代,比如:
[14014315319223725510]。我知道,如果所有字节都是有效的unicode字符,但它们不是,那么to_char_数组就可以了
刚刚开始使用Elixir,非常感谢任何关于将二进制文件转换为列表(字节数组)的建议。看看erlang的
:binary.bin\u to\u list()
# [140, 143, 153, 192, 237, 255, 10]
我刚刚
我写过:
Logger.info(payload|>inspect)
有效载荷以二进制格式出现,可能相当大
出于调试目的,我需要完整地编写它,但是,我得到:
15:04:31.269 [info] <<10, 36, 102, 102, 100, ...>>
15:04:31.269[信息]
像这样,但我缩短了行以适应(更大)。您需要提供truncate::infinity选项(或您需要的咬大小)
如果你知道答案,并且在发送问题后马上知道答案,那么创建问题有什
标签: Elixir
phoenix-frameworkectoelixir-mix
当我尝试运行mix deps.get或mix deps.compile时,我遇到以下错误:
== Compilation error on file lib/phoenix_ecto/html.ex ==
** (CompileError) lib/phoenix_ecto/html.ex:3: unknown key :model for struct Ecto.Changeset
(stdlib) lists.erl:1354: :lists.mapfoldl/3
为什么会发生这种
我有一个来自第三方库的函数,它从数据库返回数据:
cars = get_all_cars #third-party function
在内部,它执行类似于Repo.all(从车中的c)。我想预加载与模型车相关的2个模型。我能做到
`Repo.all(from c in Car, preload: [:driver, :driver_to_car])`
但是我没有访问权限,也不想更改get\u all\u cars的源代码。那我怎么做呢
请注意,汽车和驾驶员之间存在多对多关系。您可以将结构或
我想在部署新版本的应用程序时向所有用户显示“新版本可用,请刷新页面”消息
我在想,如果有一种方法可以在部署新版本后运行一些代码,那么我可以使用它发布到频道
这可能吗?您的应用程序如何start/2功能?它应该在lib/my_app.ex中。您的部署工具呢?可能您可以执行一个“部署后”配方,它会广播这样一条消息。您的应用程序start/2功能如何?它应该在lib/my_app.ex中。您的部署工具呢?可能您可以执行一个“部署后”配方,它会广播这样的消息。
标签: Elixir
phoenix-frameworkecto
我想在没有第三方库的情况下获得Phoenix/Elixir中的当前日期时间戳。或者简单地说,我想要类似于DateTime.now()的东西。我如何才能做到这一点?Ecto必须以UTC为单位获取当前时间:
iex(1)> Ecto.DateTime.utc
#Ecto.DateTime<2016-09-05 13:30:04>
iex(2)> Ecto.DateTime.utc(:usec) # include microseconds
#Ecto.DateTime<
标签: Elixir
generatorphoenix-frameworkelixir-mix
我缺少Phoenix特定的混合任务,例如mix Phoenix.gen.html
$mix help| grep-i phoenix
mix local.phoenix#在本地更新phoenix
mix phoenix.new#创建一个新的phoenix v1.2.1应用程序
$mix-v
Erlang/OTP19[erts-8.1][source][64位][smp:8:8][async threads:10][hipe][kernel poll:false][dtrace]
混合料1.3.4
Python的pdb允许您使用s单步执行要执行的函数,并使用n转到要执行的下一个函数。如何使用Elixir的调试器实现同样的效果
我在这里尝试的调试技术是IEx.pry。我愿意接受任何其他调试方法(包括使用Erlang)您可能会注意到我在关于Iex.Pry的评论中链接的博客文章中的这段话:
虽然它不是传统的调试器,因为您无法单步执行,但添加
断点等等,对于非生产性应用来说,它是一个很好的工具
调试
什么是长生不老药的调试器?好了,没有这样的东西。@michalmuskala在Elixir中有调试
标签: Elixir
phoenix-frameworkphoenix-channels
出于学习目的,我创建了这个简单的TODO应用程序,它使用Phoenix频道而不是控制器来CRUD列表和TODO:
代码如下:
现在,我想继续这个实验,从不同的Phoenix(甚至只是Elixir)应用程序向现有的Heroku应用程序发送频道消息,比如创建一个新列表。但在这里我遇到了麻烦
连接Heroku插座的方式是什么(wss://chandothis.herokuapp.com/socket/websocket?token=undefined&vsn=1.0.0)并加入频道“列表”
更新1
首先,我对长生不老药很陌生,所以这可能是一个误导性的问题
我有一个启动两个进程的函数
第一个进程使用erlang:fs库监视目录中的文件更改,然后向第二个进程发送消息
第二个进程等待目录中的文件已更改的消息,当它收到该消息时,运行一个函数重新生成HTML报告(这是一个发票)
看起来是这样的:
def run_report_daemon(line_item_dir) do
if Process.whereis(:html_daemon) == nil do
spawn(HT
标签: Elixir
phoenix-frameworkecto
我有一个在聊天室中加载所有邮件的查询:
room=conn.assignments[:room]|>Repo.preload(消息:from(消息中的m,订单人:插入的m))
我还希望有一个users变量,它是创建这些消息的不同/唯一记录的列表
我可以从room.messages创建用户ID的地图集,然后查询这些用户。但我想知道是否有一种更干净、更高效的方法来实现这一点 仅供参考,您不需要地图集。您可以像这样使用Enum.uniq:^Enum.uniq中的id(对于m@Dogbert,谢谢。很高
在exto.build\u assoc/3中,是否可以将模型列表作为第三个参数传递?假设我有一个与类别模型有多对多关系的产品模型,以及我想与该产品关联的3个现有类别,是否可以这样做:
product = Repo.get!(Product, 1)
#assume the below function exists and returns a list of categories
categories = Category.get_children(:fashion)
#here, the do
我是新来凤凰城的。处理一些示例代码。当我将此行添加到控制器时,仍然会通过以下方式发送空字符串:
defmodule Rumbl.VideoController do
use Rumbl.Web, :controller
plug :scrub_params, "video" when action in [:create, :update]
...
end
控制台上的输出与有无擦洗线相同:
[debug] Processing by Rumbl.VideoContro
标签: Elixir
phoenix-frameworkecto
我想找出“utc now”和类型为exto.DateTime的变量之间的时间差(以分钟为单位)。最简单的方法是什么?我是否应该在unix时间内转换它们并进行减法,而不是先进行模式匹配并比较年、月、日和小时,然后再实际减去分钟?我不希望使用任何第三方依赖项 JIC:它有一个助手(以及来自_unix!和其他一些工具的),它还负责用生成“utc now”
ElixirDateTime反过来又有,因此人们可能:
dt1, dt2 = [ecto_time, Ecto.DateTime.utc]
以下文件。出错
Phoenix.Template.UndefinedError)无法为MyApp.EmailView呈现“welcome.html”,请为render/2定义匹配子句或在“lib/MyApp/web/templates”中定义模板。没有为此模块编译模板
我在/templates/email中找到了welcome.html。但是,如果我在/templates中有welcome.html,我就不会面对这个问题
。。。以及带有错误的函数
#lib/Myapp/web/email.ex
当我调用mix phoenix.server时,我得到以下错误。我试着重新启动我的电脑
版本:
macOS Sierra 10.12.4(16E195)
长生不老药1.4.2
依赖项:
错误消息:
**(退出#PID)引发异常:
**(File.Error)无法写入文件“/Users/joseph/sites/super/_build/dev/consolidated/Elixir.exto.Queryable.beam”:权限被拒绝
(elixir)lib/file.ex:719:file.w
标签: Elixir
datetime-formatecto
这是我的模型:
schema "fixtures" do
field :sm_id, :integer
field :local_score, :integer
field :visitor_score, :integer
field :local_pen_score, :integer
field :visitor_pen_score, :integer
field :ht_score, :string
field :ft_score,
标签: Elixir
phoenix-frameworkendpointphoenix-channels
我有一个频道,当你连接到它时,它在后端做一些事情。一旦后端作业完成,我需要将响应发送回。
这是我的频道:
def join("boot", _, socket) do
Launcher.start()
{:ok, socket}
end
def handle_in("boot:fetch", params, socket) do
payload = %{total_reports: 5}
{:reply, {:ok, payload}, socket
标签: Elixir
phoenix-frameworkecto
我想验证结束日期是否总是晚于或与开始日期相同。但是我的自定义验证不起作用。编写此验证的正确方法是什么
defmodule Example.Calendar.VacationPeriod do
use Ecto.Schema
import Ecto.Changeset
alias Example.Calendar.VacationPeriod
schema "vacation_periods" do
field :ends_on, :date
field :nam
标签: Elixir
phoenix-frameworkecto
我目前正在进行一系列迁移,这些迁移创建了一些带有引用和一些唯一索引的表。当我想用mix-exto.migrate迁移表时,这似乎工作得很好,但是如果我想回滚mix-exto.rollback会出现以下错误。我是否需要更改迁移以添加一些内容来处理回滚期间的索引
迁移步骤:
defmodule App.Repo.Migrations.CreateTokens do
use Ecto.Migration
def change do
create table(:tokens) do
标签: Elixir
phoenix-frameworkplug
我的Phoenix应用程序中有2个页面,它们需要不同的文件上传大小限制(一个页面可以使用默认的8MB限制,但第二个页面需要更高的限制)
从文档中,我可以增加MyApp.Endpoint模块中的限制,如下所示:
plug Plug.Parsers,
parsers: [:urlencoded, :multipart, :json],
pass: ["*/*"],
json_decoder: Poison,
length: 15000000
但是这种设置是站点范围的。我尝试将整个解
我有这个:
defmodule SomeModule do
@my_custom_config_section (Application.get_env(:my_app, :common)[:key1][:key2])
IO.puts("@my_custom_config_section debug1: #{Kernel.inspect(@my_custom_config_section)}")
IO.puts("@my_custom_config_section
我有一个独特的问题,我没有必要在elxir中解决
我需要使用dynamic supervisor在集群环境中动态启动(n)个孩子。我使用libcluster来管理集群,并使用全局进程注册表来查找动态管理器pid。。以下是正在发生的事情:
global: Name conflict terminating {:packer_supervisor, #PID<31555.1430.0>}
问题似乎是在两个节点上都启动了监控程序。处理这个问题的最佳方法是什么?我真的需要主管是动态的,这样
我在我的计算机上安装了elixir 1.7.2,使用的是asdf,elixir和erlang otp 21。在我的项目混合文件中,我添加了透析器的最新版本候选者,如上所示
当我运行mix dialyzer时,在创建plt时,我遇到了几个错误,其中包括:
Could not get Core Erlang code for: /home/sigu/.asdf/installs/elixir/1.7.2/lib/elixir/ebin/elixir_parser.beam
Recompile wi
我正在尝试使用HTTPoison向一个插件路由器发出POST请求。我的GET请求成功了,只有帖子失败了。我不确定问题是插头还是HTTPoison:
# server.ex
defmodule MyServer do
use Application
use Plug.Router
import Plug.Conn, only: [put_resp_header: 3, send_resp: 3]
alias Plug.Adapters.Cowboy
plug(:matc
标签: Elixir
phoenix-frameworkplug
我尝试了两次不同的迭代,但在编译时不断出现以下错误:
Routes.session_path/2 is undefined (module Routes is not available)
我的代码:
defmodule Blackbook.Plugs.RequireAuth do
进口插头
导入菲尼克斯控制器
别名Blackbook.Router.Helpers,as:Routes
def init(_参数)do
终止
def呼叫(连接,参数)do
如果连接分配[:当前用户]执行
康涅狄格州
我定义了一个如下所示的地图:
%{
"24fe6042-2673-4713-8052-5c06e5ddcce8" => %Parameter{
index: 1,
name: "b",
},
"28ab6e8b-95b8-4123-af5d-5e988071c383" => %Parameter{
index: 0,
name: "a",
}
},
如何根据值内的
标签: Elixir
phoenix-frameworkecto
我目前正在开发一个应用程序,要求在系统中注册的每个学生在注册时都有一个唯一的注册号,该注册号在每次注册时自动递增。2019年注册的第一名学生的注册号应为01/19,第890名学生的注册号应为890/19,等等
注册数据是从工具上传的,因此它在非常短的时间间隔内到达我的端点,一次可以提交近200次
我意识到在1000份记录中有将近27份重复的注册号。这就是我实现注册号生成逻辑的方式
def registration_changeset(student, attrs) do
student
我持续监控一个值以进行检测。我想知道如果它是一个递归函数,它会可靠地工作吗?或者我应该创建一个Genserver并连续调用它,以便它能够处理故障?哪些是使用GenServer的最佳案例,哪些不是 GenServer也只是一个递归调用的函数,但它在自己的进程中运行,并且在其顶部有一些附加功能
出于以下几个原因,您需要将长期运行的进程建模为GenServer:
并行性-如果作为一个GenServer(也称为一个单独的进程)实现,系统将能够并行地做其他事情
隔离错误-如果GPIO代码崩溃,您不想影响
我正在尝试在几个elixir节点之间设置集群。我的理解是,我可以通过修改vm.args版本来设置它。我正在使用Diverery构建发行版,并遵循以下文档:
我的rel/vm.args文件如下:
-name <%= release_name %>@${HOSTNAME}
-setcookie <%= release.profile.cookie %>
-smp auto
-kernel inet_dist_listen_min 9100 inet_dist_listen_m
标签: Elixir
phoenix-frameworkecto
在嵌套表单上呈现变更集错误时遇到一些问题
表单呈现:
def new(conn, _) do
changeset = Organizations.Organization.create_organization_changeset(%Organization{workspace: %Workspace{}})
render(conn, "new.html", changeset: changeset)
end
表单最初呈现为罚款:
<%= form_for @changeset,
我正在和你聊天。
我有许多房间,这些房间里有会员。用户还可以加入多个房间,因此这是一种多对多关系。
我想要一个房间,预装它的成员,并为每个成员,计算他有多少未读的邮件
以下是我在ecto中尝试执行的请求:
room_id = "general"
members_preload = from u in User,
join: ru in RoomUser, on: ru.user_id == u.id,
join: r in
假设我有一个字符串,如s=“abcdé”,我想将其截断为若干字节,在本例中为五(5)。但是,因为最后一个“grapheme”由多个字节组成,我希望byte\u truncate\u(s,5)=“abcd”是正确的,因为使用二进制部分并拆分最终的grapheme似乎不明智。我认为没有内置的方法可以做到这一点,但您肯定可以手动完成
def take_bytes(str, limit) do
str
|> String.graphemes()
|> Enum.r
我有一张这样的地图:
%{
"US" => "United States",
"CA" => "Canada",
"NL" => "The Netherlands"
}
%{
"United States" => "US",
"Canada" => "CA",
"The Netherlands" => "NL"
}
我希望将键与值交换,从而生成如下映射:
%{
"US" => "United States",
"CA"
我无法从混合版本启动项目。但是如果我运行mixphx.server
我可以通过执行以下操作从空项目中重新创建此问题:
mix phx.new asdf--伞形--无外挂--无html--无网页
然后编辑mix.exs并添加发布部分:
def项目做什么
[
应用程序路径:“应用程序”,
start_permanent:Mix.env()==:prod,
deps:deps(),
版本:“0.1.0”,
发布:[
超级雨伞:[
应用程序:[
永久的,
mega_web::永久
]
]
]
]
结束
我有以下正在进行的测试:
test "accepts a request on a socket and sends back a response (using tasks)" do
spawn(HttpServer, :start, [4000])
urls = [
"http://localhost:4000/products",
"http://localhost:4000/shops&quo
我有一个地图列表,如下所示:
[
%{
"key1" => "someVal",
"key2" => "anotherVal"
},
%{
"key1" => "someVal",
"key2" => "anotherVal"
}
]
如何更改此设置,以便使用新键更新贴图,但使
嘿,我正在处理这个位于:
尝试添加实时更新功能以制作新帖子时,我遇到了以下错误:
no route found for POST /posts/new (ChirpWeb.Router)
发生这种情况的原因似乎相当明显:我没有POST:/posts/newroute中的mix phx.routes
post_index_path GET /posts/new Phoenix.LiveView.Plug :new
pos
1 2 3 4 5 6 ...
下一页 最后一页 共 81 页