我想测试一个使用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
我想要执行一个(缓慢的)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选项(或您需要的咬大小)
如果你知道答案,并且在发送问题后马上知道答案,那么创建问题有什
我有一个来自第三方库的函数,它从数据库返回数据:
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的源代码。那我怎么做呢
请注意,汽车和驾驶员之间存在多对多关系。您可以将结构或
标签: 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
我是新来凤凰城的。处理一些示例代码。当我将此行添加到控制器时,仍然会通过以下方式发送空字符串:
defmodule Rumbl.VideoController do
use Rumbl.Web, :controller
plug :scrub_params, "video" when action in [:create, :update]
...
end
控制台上的输出与有无擦洗线相同:
[debug] Processing by Rumbl.VideoContro
标签: 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-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>}
问题似乎是在两个节点上都启动了监控程序。处理这个问题的最佳方法是什么?我真的需要主管是动态的,这样
我正在尝试使用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
我正在尝试在几个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
我无法从混合版本启动项目。但是如果我运行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
在下面的链接中做了一些研究之后
我有点困惑如何在长生不老药中使用异位素
总是有一个声明为
defmodule Weather do
use Ecto.Model
schema "weather" do
field :city, :string
field :temp_lo, :integer
field :temp_hi, :integer
field :prcp, :float, default: 0.0
timestamps
end
e
标签: Elixir
phoenix-frameworkcowboy
我试图弄清楚如何在没有任何其他框架(Phoenix、Sugar等)的情况下配置Plug.Static;只有牛仔、塞子和长生不老药。我只是不知道如何把东西放在路由器里
plug :match
plug Plug.Static, at: "/pub", from: :cerber
plug :dispatch
get "/" do
Logger.info "GET /"
send_resp(conn, 200, "Hello world\n")
end
Plu
标签: Elixir
phoenix-frameworkexrm
我已尝试使用EXRM发布我的应用程序。除了无法启动的WebSocket外,整个应用程序都在运行
这是浏览器中的错误(Chrome)
到“ws://localhost:4001/socket/WebSocket?token=undefined”的WebSocket连接失败:WebSocket握手期间出错:意外响应代码:403
变量标记似乎有问题。
当开始使用Mix phoenix.server时,一切都很好。但发布命令时:
$ mix deps.get
$ mix compile
$ MIX_EN
我试图创建一个具有特定名称的GenEvent进程(对于这个问题,我将使用{:global,:x})。如果我正常创建GenEvent,例如GenEvent.start_链接([name:{:global,:x}]),我可以访问该名称的GenEvent。那很好。但我还想在监督树下创建GenEvent。为此,我将genevent放入一个Supervision.SpecworkerSpec,然后事情就发生了
iex(1)> {:ok, sup} = Supervisor.start_link([]
我有一个phoenixreq_headers列表,其中包含像{key,value}这样的元组。如何通过列表中的键获取元组的值?就像这样:
[{"host", "localhost:4000"}, {"user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"}, {"accept", "application/json, text/plain, */*"}, {"accep
标签: Elixir
phoenix-frameworkchannel
我有一个Elixir应用程序在节点集群上运行(n1@127.0.0.1及n2@127.0.0.1),我们将其命名为Myapp.Server
在它里面,我有一个模块run(parameter),它的目标是联系Rest Web服务来获取一些数据(parameter是要获取的数据的数量),将其转换为XML,然后将其放入一个文件,最后将其传输到外部FTP
召唤
Myapp.Server.run(any_number)
因此给了我预期的结果
我刚刚开始学习长生不老药和凤凰,但有两个问题不断出现在我的脑海
标签: Elixir
phoenix-frameworkecto
我和菲尼克斯一起踢球,有很多联系。我通常在_delete::delete _all上做,作为参考列的一个选项。但是,如果我改变主意,希望以后为nilify\u all更改它,有没有办法在迁移中实现这一点
用于创建表的迁移:
def change do
create table(:messages) do
add :body, :text
add :sender_id, references(:users, on_delete: :delete_all)
与其他数据访问库相反,Ecto非常明确。除非您直接请求,否则它不会为查询中的结果获取任何关联
要请求它们,您有两个选项:构建自己的查询或只需使用preload
Preload也有两种版本-一种是在现有查询中附加此命令:
Template code includes:
<%= for shift <- @shifts do %>
<tr>
<td><%= shift.user_id %></td>
<td>&
标签: Elixir
phoenix-frameworkecto
因此,我有一个属于用户模式的客户机模式,还有一个公司模式(可选)
这是我在注册表中使用的客户端变更集:
@doc false
def create_changeset(%Client{} = client, attrs) do
client
|> cast(attrs, [:qualification, :phone])
|> cast_assoc(:user, with: &User.create_changeset/2)
|>
我得到了文件2018042309126\u create\u reference\u book.exs
defmodule Simula.Repo.Migrations.CreateReferenceBook do
use Ecto.Migration
def change do
create table(:reference_books) do
add(:owner_id, :integer, default: 0)
add(:owner_entity
标签: Elixir
phoenix-frameworkex-unit
我正在编写一个控制器函数,它将在呈现json对象或错误对象(如果失败)之前检查条件(关键字有效)
路由器.ex
scope "/api", DongNghiaWeb do
pipe_through :api
scope "/tim_kiem" do
get "/tu/:word" , APIWordController, :search_word
[...]
def search_word(conn, %{"word" => word}) do
con
我正在尝试在我的phoenix/elixir web应用程序中使用cachex作为缓存层。当我打开交互式控制台iex并键入Cachex.get:my_cache,key
它表明
(UndefinedFunctionError) function Cachex.get/2 is undefined (module Cachex is not available)
我遵循了此处所示的所有步骤听起来您在打开控制台时没有运行应用程序cachex文档只是说iex。实际上,您应该使用iex-S mix启动
在elixir代码中,我希望将位置更改为目录并在那里运行脚本
File.cd!("/opt/test/", System.cmd("./bin/myscript.sh", []))
File.cd的第二个参数!是一个函数,我认为System.cmd可以满足作为函数的要求,但是我使用的编辑器说这个语句永远不会工作
是否有更简单的方法来更改目录并执行shell脚本?如何
System.cmd("/opt/test/bin/myscript.sh&q
上一页 1 2 ...
34 35 36 37 38 39 40 ...
下一页 最后一页 共 125 页