在Elixir中测试异步代码

我想测试一个使用Task.async 为了使我的测试通过,我需要在断言之前让它休眠100毫秒,否则测试进程在异步任务执行之前被终止 有更好的办法吗 已编辑,正在添加代码示例: 我想测试的代码(大致): 以及我已经编写的测试(仅在调用睡眠时使用) 由于这个问题有点模糊,我将在这里给出一般性的回答。通常的技术是监视进程并等待停机消息。大概是这样的: task = Task.async(fn -> "foo" end) ref = Process.monitor(task.pid) asser

具有多个/动态配置文件的Elixir应用程序

我有一个elixir应用程序,一个应用服务器,它将从启动参数中受益。这个应用程序使用了一个EXTO存储库,所以我可以在那里存储应用服务器的配置,但是我仍然需要一个配置密钥来从数据库中检索什么 目前,我一直在为服务器应用程序使用config.exs(整个应用程序是一个伞形项目),但显然这只处理一个静态配置 我的问题是: 我可以使用mix指定要使用的配置文件吗?我知道Mix库中有几个函数,但据我所知,它们都是应用程序启动后可以使用的函数。 同样,我可以使用mix来加载任何子应用程序的配置文件吗 谢谢

Elixir 分布式长生不老药示例不';行不通

我有一个非常简单的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

Elixir Plug,使用在init传递的选项和Plug.Router语法

我正在使用插头,我想了解 我的代码如下所示: defmodule Numerino.Plug do 使用插头路由器 使用Plug.Debugger plug:put_resp_content_type,“application/json” 插头:匹配 插头:调度 definit选项做什么 IO.inspect选项 选择权 结束 得到“/”做 康涅狄格州 |>检查 |>发送响应(201,“世界”) 结束 相配 发送响应(conn,404,“未找到”) 结束 结束 在get中,我需要使用选项作为参

Elixir 具有外胚层的反向多态性

当前的EXTO文档仅解释了当多态的注释可以同时属于任务和Post时,如何构建属于多态关联类型的。但是相反的方向呢 例如,有一个列表,它可以有四种类型的属性之一:房间,公寓,维拉或办公室 考虑到一对一的关系,鉴于上述示例,这意味着应该有房间/房源,公寓/房源,维拉/房源和办公室/房源,这是不可能的,因为这将导致与列表相关联的所有其他表的重复 问题是如何建立这种关系的模型 我认为最简单的建模方法是翻转关联的两侧,然后将room\u id等字段添加到listings表中: defmodule List

Elixir 如何执行ActiveRecord的查询current_user.articles(与Ecto等效)?

在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.

Elixir Phoenix全局变量插头

我试图根据网站的域获取其标识符,但在为其编写了一个插件之后,我遇到了一个问题,系统中的所有链接都返回根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

Elixir erlang:now()在v18中不推荐使用,什么';这是最好的过渡

在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})

与Elixir/Erlang同步执行Shell命令

我想要执行一个(缓慢的)python脚本,我想要我的Elixir进程阻塞,直到它接收到脚本的所有输出 Elixir的System.cmd/3或Erlang的os:cmd/1是否保证同步?如果没有,是否有其他方法进行同步操作系统调用? 在目标操作系统的命令外壳中执行命令,捕获 命令的标准输出,并将此结果作为字符串返回。 此函数取代了以前的unix:cmd/1;在Unix上 它们是等价的 此命令是同步的。不确定。谢谢

Elixir EXTO架构字段名是否可以与列名不同?

我有一个遗留数据库,我正试图将其引入到EXTO中。其中有一个orders表,其中有一个order\u status\u id列顺序\状态\ id映射到旧系统中的一组常量 我希望MyApp.Orderstruct包含一个Order\u status字段,该字段具有一个自定义类型,可以将整数ID转换为有意义的原子。我已经使用了自定义类型,但我不知道如何将名为order\u status的字段映射到名为order\u status\u id的列 遗留系统仍然在线并使用数据库,因此更改DB模式不是一个选

Elixir 长生不老药睡眠/等待1秒

如何睡眠/等待一秒钟 我能找到的最好的东西是这样的(在iex中): 但我的两次PUT都不会延迟。计时器使用毫秒而不是秒,更新为: IO.puts "foo" ; :timer.sleep(1000); IO.puts "bar" Erlang文档中的计时器文档: 暂停调用此函数的进程的时间量 毫秒,然后返回ok,或者如果 时间是无限的原子。当然,此函数不会返回 马上 由于Elixir 1.3,您可以使用: Process.sleep(1000) 参数以毫秒为单位。计时器模块中有一些有用的帮助

Elixir 元组应该传递给宏吗?

元组的处理方式似乎不一致: 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 {} {:{}, [],

Elixir,将二进制转换为字节数组

我的长生不老药有以下价值: 二进制文件似乎不可枚举。我需要把它转换成一个列表,这样我就可以逐字节地对它进行迭代,比如: [14014315319223725510]。我知道,如果所有字节都是有效的unicode字符,但它们不是,那么to_char_数组就可以了 刚刚开始使用Elixir,非常感谢任何关于将二进制文件转换为列表(字节数组)的建议。看看erlang的 :binary.bin\u to\u list() # [140, 143, 153, 192, 237, 255, 10] 我刚刚

Elixir 显示完整日志(它会被缩短为“…”)

我写过: Logger.info(payload|>inspect) 有效载荷以二进制格式出现,可能相当大 出于调试目的,我需要完整地编写它,但是,我得到: 15:04:31.269 [info] <<10, 36, 102, 102, 100, ...>> 15:04:31.269[信息] 像这样,但我缩短了行以适应(更大)。您需要提供truncate::infinity选项(或您需要的咬大小) 如果你知道答案,并且在发送问题后马上知道答案,那么创建问题有什

Elixir 为什么phoenix_-eTo无法在变更集中的:模型上编译?

当我尝试运行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 为什么会发生这种

Elixir 将几个模型预加载到回购的结果中

我有一个来自第三方库的函数,它从数据库返回数据: 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 部署应用程序时向通道发送消息

我想在部署新版本的应用程序时向所有用户显示“新版本可用,请刷新页面”消息 我在想,如果有一种方法可以在部署新版本后运行一些代码,那么我可以使用它发布到频道 这可能吗?您的应用程序如何start/2功能?它应该在lib/my_app.ex中。您的部署工具呢?可能您可以执行一个“部署后”配方,它会广播这样一条消息。您的应用程序start/2功能如何?它应该在lib/my_app.ex中。您的部署工具呢?可能您可以执行一个“部署后”配方,它会广播这样的消息。

Elixir DateTime.now在长生不老药和异位剂中

我想在没有第三方库的情况下获得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 缺少Phoenix特定混合任务/生成器

我缺少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

如何使用Elixir调试器进入函数并执行下一个命令?

Python的pdb允许您使用s单步执行要执行的函数,并使用n转到要执行的下一个函数。如何使用Elixir的调试器实现同样的效果 我在这里尝试的调试技术是IEx.pry。我愿意接受任何其他调试方法(包括使用Erlang)您可能会注意到我在关于Iex.Pry的评论中链接的博客文章中的这段话: 虽然它不是传统的调试器,因为您无法单步执行,但添加 断点等等,对于非生产性应用来说,它是一个很好的工具 调试 什么是长生不老药的调试器?好了,没有这样的东西。@michalmuskala在Elixir中有调试

Elixir Phoenix-连接套接字、连接通道、推送、接收来自其他应用程序的消息

出于学习目的,我创建了这个简单的TODO应用程序,它使用Phoenix频道而不是控制器来CRUD列表和TODO: 代码如下: 现在,我想继续这个实验,从不同的Phoenix(甚至只是Elixir)应用程序向现有的Heroku应用程序发送频道消息,比如创建一个新列表。但在这里我遇到了麻烦 连接Heroku插座的方式是什么(wss://chandothis.herokuapp.com/socket/websocket?token=undefined&vsn=1.0.0)并加入频道“列表” 更新1

Elixir 使父进程保持活动状态

首先,我对长生不老药很陌生,所以这可能是一个误导性的问题 我有一个启动两个进程的函数 第一个进程使用erlang:fs库监视目录中的文件更改,然后向第二个进程发送消息 第二个进程等待目录中的文件已更改的消息,当它收到该消息时,运行一个函数重新生成HTML报告(这是一个发票) 看起来是这样的: def run_report_daemon(line_item_dir) do if Process.whereis(:html_daemon) == nil do spawn(HT

Elixir 针对不同关联记录的EXTO查询

我有一个在聊天室中加载所有邮件的查询: room=conn.assignments[:room]|>Repo.preload(消息:from(消息中的m,订单人:插入的m)) 我还希望有一个users变量,它是创建这些消息的不同/唯一记录的列表 我可以从room.messages创建用户ID的地图集,然后查询这些用户。但我想知道是否有一种更干净、更高效的方法来实现这一点 仅供参考,您不需要地图集。您可以像这样使用Enum.uniq:^Enum.uniq中的id(对于m@Dogbert,谢谢。很高

Elixir 一次使用多个模型的外部构建协会

在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

Elixir 长生不老药

我是新来凤凰城的。处理一些示例代码。当我将此行添加到控制器时,仍然会通过以下方式发送空字符串: defmodule Rumbl.VideoController do use Rumbl.Web, :controller plug :scrub_params, "video" when action in [:create, :update] ... end 控制台上的输出与有无擦洗线相同: [debug] Processing by Rumbl.VideoContro

Elixir 如何比较菲尼克斯/埃克托两次约会的分钟数?

我想找出“utc now”和类型为exto.DateTime的变量之间的时间差(以分钟为单位)。最简单的方法是什么?我是否应该在unix时间内转换它们并进行减法,而不是先进行模式匹配并比较年、月、日和小时,然后再实际减去分钟?我不希望使用任何第三方依赖项 JIC:它有一个助手(以及来自_unix!和其他一些工具的),它还负责用生成“utc now” ElixirDateTime反过来又有,因此人们可能: dt1, dt2 = [ecto_time, Ecto.DateTime.utc]

Elixir 渲染模板时Phoenix.Template.UndefinedError-Phoenix 1.3

以下文件。出错 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

Elixir 无法启动phoenix服务器

当我调用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/Phoenix端点广播

我有一个频道,当你连接到它时,它在后端做一些事情。一旦后端作业完成,我需要将响应发送回。 这是我的频道: 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 验证多个日期晚于或等于另一个日期

我想验证结束日期是否总是晚于或与开始日期相同。但是我的自定义验证不起作用。编写此验证的正确方法是什么 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外部回滚迁移

我目前正在进行一系列迁移,这些迁移创建了一些带有引用和一些唯一索引的表。当我想用mix-exto.migrate迁移表时,这似乎工作得很好,但是如果我想回滚mix-exto.rollback会出现以下错误。我是否需要更改迁移以添加一些内容来处理回滚期间的索引 迁移步骤: defmodule App.Repo.Migrations.CreateTokens do use Ecto.Migration def change do create table(:tokens) do

Elixir 如何为不同的控制器定义不同的文件上载限制?

我的Phoenix应用程序中有2个页面,它们需要不同的文件上传大小限制(一个页面可以使用默认的8MB限制,但第二个页面需要更高的限制) 从文档中,我可以增加MyApp.Endpoint模块中的限制,如下所示: plug Plug.Parsers, parsers: [:urlencoded, :multipart, :json], pass: ["*/*"], json_decoder: Poison, length: 15000000 但是这种设置是站点范围的。我尝试将整个解

Elixir 配置部分为空且非空

我有这个: 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

Elixir 集群中的全局动态管理器

我有一个独特的问题,我没有必要在elxir中解决 我需要使用dynamic supervisor在集群环境中动态启动(n)个孩子。我使用libcluster来管理集群,并使用全局进程注册表来查找动态管理器pid。。以下是正在发生的事情: global: Name conflict terminating {:packer_supervisor, #PID<31555.1430.0>} 问题似乎是在两个节点上都启动了监控程序。处理这个问题的最佳方法是什么?我真的需要主管是动态的,这样

Elixir 透析器无法识别长生不老药功能,错误为: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

Elixir 用HTTPoison插入路由器的POST请求失败

我正在尝试使用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 1.4如何在插件中别名Routes.page_路径

我尝试了两次不同的迭代,但在编译时不断出现以下错误: 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 如果连接分配[:当前用户]执行 康涅狄格州

Elixir 如何按值对地图进行排序?

我定义了一个如下所示的地图: %{ "24fe6042-2673-4713-8052-5c06e5ddcce8" => %Parameter{ index: 1, name: "b", }, "28ab6e8b-95b8-4123-af5d-5e988071c383" => %Parameter{ index: 0, name: "a", } }, 如何根据值内的

Elixir 提供重复项的字符串的自定义自动递增字段

我目前正在开发一个应用程序,要求在系统中注册的每个学生在注册时都有一个唯一的注册号,该注册号在每次注册时自动递增。2019年注册的第一名学生的注册号应为01/19,第890名学生的注册号应为890/19,等等 注册数据是从工具上传的,因此它在非常短的时间间隔内到达我的端点,一次可以提交近200次 我意识到在1000份记录中有将近27份重复的注册号。这就是我实现注册号生成逻辑的方式 def registration_changeset(student, attrs) do student

Elixir 像GPIO read forever这样的任务应该是递归函数还是GenServer?

我持续监控一个值以进行检测。我想知道如果它是一个递归函数,它会可靠地工作吗?或者我应该创建一个Genserver并连续调用它,以便它能够处理故障?哪些是使用GenServer的最佳案例,哪些不是 GenServer也只是一个递归调用的函数,但它在自己的进程中运行,并且在其顶部有一些附加功能 出于以下几个原因,您需要将长期运行的进程建模为GenServer: 并行性-如果作为一个GenServer(也称为一个单独的进程)实现,系统将能够并行地做其他事情 隔离错误-如果GPIO代码崩溃,您不想影响

Elixir 如何使用REPLACE_OS_VARS与蒸馏厂一起设置动态自定义vm.args? 背景

我正在尝试在几个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 (ArgumentError)无法为<;协会>;

在嵌套表单上呈现变更集错误时遇到一些问题 表单呈现: def new(conn, _) do changeset = Organizations.Organization.create_organization_changeset(%Organization{workspace: %Workspace{}}) render(conn, "new.html", changeset: changeset) end 表单最初呈现为罚款: <%= form_for @changeset,

Elixir 为什么外星生物可以';t使用'预加载查询;分组依据';?

我正在和你聊天。 我有许多房间,这些房间里有会员。用户还可以加入多个房间,因此这是一种多对多关系。 我想要一个房间,预装它的成员,并为每个成员,计算他有多少未读的邮件 以下是我在ecto中尝试执行的请求: room_id = "general" members_preload = from u in User, join: ru in RoomUser, on: ru.user_id == u.id, join: r in

Elixir 截断字符串&x27;很好地';,到*字节数*

假设我有一个字符串,如s=“abcdé”,我想将其截断为若干字节,在本例中为五(5)。但是,因为最后一个“grapheme”由多个字节组成,我希望byte\u truncate\u(s,5)=“abcd”是正确的,因为使用二进制部分并拆分最终的grapheme似乎不明智。我认为没有内置的方法可以做到这一点,但您肯定可以手动完成 def take_bytes(str, limit) do str |> String.graphemes() |> Enum.r

Elixir:如何反转贴图(交换键和值)?

我有一张这样的地图: %{ "US" => "United States", "CA" => "Canada", "NL" => "The Netherlands" } %{ "United States" => "US", "Canada" => "CA", "The Netherlands" => "NL" } 我希望将键与值交换,从而生成如下映射: %{ "US" => "United States", "CA"

Elixir Can';Don’不要将长生不老药凤凰作为混合发行版

我无法从混合版本启动项目。但是如果我运行mixphx.server 我可以通过执行以下操作从空项目中重新创建此问题: mix phx.new asdf--伞形--无外挂--无html--无网页 然后编辑mix.exs并添加发布部分: def项目做什么 [ 应用程序路径:“应用程序”, start_permanent:Mix.env()==:prod, deps:deps(), 版本:“0.1.0”, 发布:[ 超级雨伞:[ 应用程序:[ 永久的, mega_web::永久 ] ] ] ] 结束

Elixir Phoenix Live View路由您可以指定http谓词吗?

嘿,我正在处理这个位于: 尝试添加实时更新功能以制作新帖子时,我遇到了以下错误: 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 页