我试图测试一个构建HashDict的算法,但是我不能让我的“预期”实际上等于我的“实际”。例如
iex> expected = HashDict.new([ key: 12 ])
#HashDict<[foo: 12]>
iex> actual = Dict.put(HashDict.new, "key", 12)
#HashDict<[{"foo", 12}]>
我非常喜欢测试用例中简单的Dict文本语法,但是我的实现递归地构建Dict。如何使它们相等?
例如,我有一个结构
post = %Post{title: "Title", desc: nil}
我想得到
%{title: "Title"}
我的解决办法是
post
|> Map.delete(:__struct__) # change the struct to a Map
|> Enum.filter(fn {_, v} -> v end)
|> Enum.into(%{})
它是有效的,但是有更好的吗
更新:
我觉得从结构到映射,再到枚举,再
我正在尝试使用长生不老药来编写程序来访问记忆。我在AmazonLinux中运行IEXShell。我尝试使用连接另一个节点
Node.connect(:'hello@abc.com')
如果返回true,那么我想在这个远程节点上运行mnesia命令,我发出
:mneisa.info
但是,它只返回本地节点mnesia info。如何访问连接的远程节点的mnesia数据库
我试过rpc_调用,它可以工作。但是它是否有更直接的方法从远程节点mnesia获取数据。您是否尝试过:
Node.spa
所以我想知道是否有任何库可以用于phoenix framework的全文搜索?我试着用谷歌搜索一些东西,即使是在erlang,但只找到了一些非常古老的库…我想你是在问一些关于BEAM本机的东西。否则,我不知道你为什么不能使用。当然,您必须编写一些粘合代码,但我认为没有任何解决方案不需要一点粘合代码。您应该检查您的数据库如何支持此功能。例如:@JoséValim哦,我明白了,我会试试的,谢谢。我想感谢你为提出这个框架所做的所有工作,这是令人惊讶的。来自@JoséValim的链接不再可用,但Wayb
在elixir中,可以用两种不同的方式定义“和”函数:
def sum, do: 0
def sum(a), do: a
def sum(a, b), do: a + b
def sum(a, b, c), do: a + b + c
或
我甚至可以混合使用这两种方法:
def sum() do 0 end
def sum(a) do a end
def sum(a,b) do a + b end
def sum(a,b,c), do: a + b + c
我的问题是:为什么有两种方法可以达
我有一个正在工作的telnet服务器,我正试图为它创建一个单元测试。服务器可以与telnet客户端配合使用,并在连接完成后立即发送提示。在同一个插座上发送可以正常工作。
但是,单元测试的TCP客户端拒绝接收数据并超时。我不熟悉长生不老药,所以,我可能缺少一些基本的东西
opts=[:binary,packet::line,active:false,reuseaddr:true]
{:ok,socket}=:gen_tcp.connect('127.0.0.1',4040,opts)
{:好的,
我正在尝试构建一个小应用程序,它将连接到遗留数据库。有没有一种方法可以使用与表列不同的属性名称来定义EXTO模型
比如:
schema "oauth_access_tokens" do
field :token
field :user_id, :integer, column: :resource_owner_id
end
不幸的是,我认为现在不可能
一个可能的解决方案是在数据库级别使用视图,但我不确定这是否是一个好主意。谢谢,我希望我在文档中遗漏了一些内容,但似乎没有:(
导入包含以下函数的exs文件时:
iex(6)> import_file("mymath.exs")
{:module, MyMath,
<<70, 79, 82, 49, 0, 0, 4, 212, 66, 69, 65, 77, 69, 120, 68, 99, 0, 0, 0, 147, 131, 104, 2, 100, 0, 14, 101, 108, 105, 120, 105, 114, 95, 100, 111, 99, 115, 95, 118, 49, 1
跑步时
mix phoenix.server
undefined function Hex.SCM.managers/1
他回来了。有人知道我应该安装哪个软件包吗?
Elixir版本为1.2.3和Erlang/OTP18
提前感谢您的Hex安装似乎已损坏。
尝试使用mix local.hex--force强制安装
您也可以尝试手动下载并安装最新版本
$ wget http://s3.amazonaws.com/s3.hex.pm/installs/1.1.0/hex-0.11.5.ez
$ m
如何在表单中使用gettext?这不起作用:
<%= select f, :gender, [gettext "Male:": "male",
gettext "Female:": "female"], class: "form-control" %>
您不能在关键字列表语法的关键部分调用函数,但可以传递包含两个字符串的元组列表:
<%= select f, :gender, [{gettext("Male:"), "male"},
{gettext("Fem
在我的Phoenix应用程序中,我希望像http://localhost:4000/2016/07/24/,由结构中的日期字段生成。我已经为我的结构创建了一个Phoenix.Paramimpl:
defimpl Phoenix.Param, for: Item do
def to_param(item) do
{{year, month, day}, _time} = item.date
"#{year}/#{month}/#{day}/"
end
结束
这正如预期的那样工作,但不
我在尝试基于记录创建和创建ETS表时遇到了一个问题。代码摘自《介绍长生不老药》一书
记录如下:
defmodule Planemo do
require Record
Record.defrecord :planemo, [name: nil, gravity: 0, diameter: 0, distance_from_sun: 0]
end
现在,如果按照以下方式创建表,则会成功:
planemo_table = :ets.new(:planemos,[:named_tab
exto.DateTime.utc返回当前日期时间
如何创建15分钟前的exto.DateTime?使用:erlang.universaltime获取时间(exto将此用于exto.DateTime.utc/0),使用:calendar转换为公历秒,减去15*60,转换回erlang时间元组,并转换回exto.DateTime:
iex(1)> utc = :erlang.universaltime |> :calendar.datetime_to_gregorian_seconds
EXTO文档展示了如何连接两个表(A您可以在树状结构中预加载关联,然后根据需要映射结果
> subquery = App.Post |> preload(:comments)
#Ecto.Query<from p in App.Post, preload: [:comments]>
> query = App.User |> preload(posts: ^subquery)
#Ecto.Query<from u in App.User,
prelo
是否有任何原生的elixir方法允许我从映射中按键获取值,无论键是原子还是字符串?比如:
a = %{ k: 1 }
b = %{ "k" => 1 }
pure_elixir_method(a, :k) => 1
pure_elixir_method(b, :k) => 1
那么,通过定义具体的:
但是我不会那样做。没有。
但您可以编写自己的包装器方法来实现这一点:
defmodule MyMap do
def get(map,key)什么时候是_atom(key)do
我正试图在测试中启动IEx.pry。但是,我无法在iex会话中运行测试。注意,我没有使用mix
ExUnit.start
defmodule Calc do
def add(a,b) do
a + b
end
end
defmodule TheTest do
use ExUnit.Case
test "adds two numbers" do
require IEx
IEx.pry
assert Calc.add(1, 2) == 3
e
标签: Elixir
phoenix-frameworkecto
我正在使用Phoenix web framework(Elixir)重写一个基于python的API交付服务,但遇到了一个小问题
我正在尝试创建一个基本的模型方法,当调用该方法时,您向它传递一个序列号,它通过Ecto查询数据库并返回结果。通过查看文档,我应该能够使用插值来定义查询中的变量,但是我仍然得到一个错误
lib/test\u result.ex文件
defmodule Webservices.TestResult do
use Ecto.Schema
schema "t
标签: Elixir
phoenix-frameworkedeliver
直到最近,“edeliver”一直运作良好,但现在它抛出了以下错误:
部署时出现此错误
[skipped]
==> Tarball updated!
==> Release successfully built!
You can run it in one of the following ways:
Interactive: _build/prod/rel/my_website123/bin/my_website123 console
Foregro
我使用Arc上传图像-这是uploader的基本结构-我不做任何自定义或奇特的操作-验证、转换或文件名都与中的类似
我想替换我上传的图像,正如我在存储它们的上传文件夹中看到的那样-一切都很好,但在我的应用程序中,我想使用url/2,如下所示:
Avatar.url({file, scope}, :thumb)
它会将我的url返回到旧文件,有时这个旧文件会被破坏-仅部分呈现。使用mix phoenix.server不会改变这种情况。有什么奇怪的缓存吗?我可以使用讨厌的变通方法来确保文件thum
试图通过其pid终止子项不起作用,应根据文档:
iex(7)>{:ok,sup}=Supervisor.start\u链接([],策略::一对一)
{:好的,#PID}
iex(8)>{:ok,pid}=Supervisor.start\u子(sup,worker(RData.ExpectedRefurbishmentCost,[self()]))
{:好的,#PID}
iex(9)>主管终止子女(主管、pid)
{:错误,:未找到}
有什么线索可以让它工作吗?对于所有策略,除了:简单的一对一
我需要生成一个随机文件密钥。它必须验证以下正则表达式:
~r/[A-Z0-9]{8}/
在Elixir中生成这样一个随机字符串的最佳方法是什么?又快又脏(可能不是世界上最好的解决方案),但类似的方法也可以
defmodule RandomKey do
@charset Enum.to_list((65..90)) ++ Enum.to_list((1..9))
def generate(size \\ 8) when is_integer(size) do
char_list
我有一句话来自这个问题-。
Elixir中是否有一个工具可以显示其计算方式的分解?由于您面临的主要问题似乎是在复杂表达式中识别无括号函数调用的参数,因此您可以将字符串解析为Elixir AST(code.string_to_quoted!/1)和back(Macro.to_string/1),这将在有函数调用的地方添加显式括号
iex(1)> "a B.c |> D.e + f g h + i" |> Code.string_to_quoted! |> Macro.to
标签: Elixir
phoenix-frameworkecto
我正在将Node.js应用程序转换为Elixir,我需要在Ecto中使用原始SQL查询,因为我有一些相当复杂的SQL查询。我在一笔交易中有大约10笔
我对Elixir也是相当陌生的,我正在尝试使用Repo.transaction,而不是尝试滚动我自己的交易
因此,我有大约10个:
raw_query = "INSERT INTO user_servers(user_id, server_id, server_type_code, position, active_flag, create_dat
标签: Elixir
phoenix-frameworkdistillery
CodeReloader(在dev模式下)正在使用Mix.Config。在dev_模式下使用蒸馏器版本时,此操作失败,因为mix在版本中不可用
有没有可能在Phoenix应用程序中完全禁用CodeReloader,这样我的应用程序就不会在dev_模式下启动了?发布版?在你的应用程序中/config/dev.exs你会得到类似的东西
config :my_app_web, MyApp.Web.Endpoint,
http: [port: 4000],
debug_errors: true,
我希望下面的代码块返回不等于0或n的值。但有时它返回的值等于0
def get_random(n, num) do
random = returns some number
IO.puts random
if random == n or random == 0 do
get_random(n, num)
end
random
end
您没有再次设置random变量
固定代码:
defmodule GetRandom do
def get_r
我有一个函数ping(),它会导致{:ok}或{:error}
是否可以创建一个包装函数test(),在返回错误之前尝试ping()5次,除非其中一个ping()响应{:ok}
如果在第一次尝试时test()可以从ping()返回{:ok},那么它应该退出递归,但如果没有,则继续尝试ping()4次
我检查过了,但似乎不知道如何使它工作。任何提示谢谢 这里不需要尝试/捕获。一个带有case语句以匹配响应的简单递归函数就足够了:
defmodule A do
# A function that
当Elixir读取源文件进行编译时,它希望该文件采用什么编码?我想包括一些具有更高unicode值的文字字符串。UTF-8
发件人:
Elixir还希望您的源文件是UTF-8编码的
我们也可以通过实验验证这一点π为0xCF 0x80
$ cat a.exs
IO.puts "π"
$ xxd a.exs
00000000: 494f 2e70 7574 7320 22cf 8022 0a IO.puts "..".
我在Ecto中有一个查询,它包含一列包含整数的和。我使用MySQL作为数据库
e、 g
通过在片段中使用MySQL的CONVERT函数,我成功地实现了预期的结果,但它似乎不是最健壮的方法:
result = Repo.one(
from v in Vote,
where: [post_id: 1],
select: fragment("CONVERT(?, SIGNED)", sum(v.direction))
)
有更好的方法吗?SUM在MySQL中为整数输入返回一个DE
我有两张单子
list1 = [1,2,3,4,5,6,7]
list2 = [3,4,5]
如果列表2中的所有元素都出现在列表1中。它应该返回true,否则它将返回false
我考虑过Enum.member?但它将单个元素与列表进行比较,而不是完整的列表
还有别的办法吗
谢谢检查长度(list2--list1)是否等于零检查长度(list2--list1)是否等于零我会使用地图集。子集?/2这里:
iex(1)> list1 = [1, 2, 3, 4, 5, 6, 7]
[1,
最有效的方法是什么?(对于一个庞大的数字列表)?
我找不到这个问题的可靠答案。一开始是,或者规范化是某种自定义的。然后,使用步骤1中的值,将原始列表重新规范化
input=[1,5,-2]
{min,max}=Enum.min\u max(输入)
{new_min,new_max}={0,1}
枚举映射(输入,
&新建最小值+(&1-min)/(最大最小值)*(新建最大值-新建最小值)))
#⇒ [0.42857142857142855, 1.0, 0.0]
一开始是或如果规范化是某种自定义的。
标签: Elixir
elixir-mixdistillery
我的应用程序在尝试运行发行版时存在以下致命问题:
** (MatchError) no match of right hand side value: {:error, {:inets, {'no such file or directory', 'inets.app'}}}
在我的本地主机上使用mix运行时,它工作正常,但是distillery 2版本有这个问题
我从erlang solutions repo安装了erlang iNet ubuntu包,并发布了另一个mix版本,但这似乎并没
我试图编写需要当前操作系统体系结构的代码,特别是它需要与编译二进制文件相同的体系结构。在我的系统上,它是x86\u 64-unknown-linux-gnu找到它:。找到它:
我正在修复Elixir项目输出字符串中的拼写和语法错误。我以前从未使用过gettext(除了制作字符串)
当我运行mix gettext.extract,然后运行mix gettext.merge priv/gettext时,我检查的第一个po文件保留了旧的拼写错误,并在底部添加了注释行更正:
#,长生不老药格式,模糊
是否通过删除字符串的旧版本手动解决此问题?我如何处理更正行上的注释?我应该手动从pot文件中删除旧字符串吗?(这似乎使修复这些错误的过程非常烦人。我希望旧的未使用字符串会消失。)
我想根据是否选中复选框来显示或隐藏表单字段。我不知道从哪里开始用eex来做这项工作
<%= form_for @changeset, @action, fn f -> %>
<div class="form-group">
<%= label f, :white_label, class: "control-label" %>
<%= checkbox f, :white_label, class: "checkbox" %&g
我刚刚开始使用ate Phoenix,但我不太了解一件事,我搜索并看到有模式,数据库结构和模型具有较高的层次和逻辑处理能力,但在Phoenix中,我们只有模式,因此,例如,如果我要进行密码哈希,它应该在用户模式中?或者我应该把它放在控制器中?一般来说,你希望你的MVC应用程序有“瘦控制器”——这是一个跨多种语言的建议。在某些语言/框架中,这非常关键,因为测试控制器可能非常困难。尽管在Elixir等函数式语言和Phoenix等结构良好的框架中测试控制器相对简单,但您仍应尽可能保持控制器的精简。简单
您好,我想将所有count和所有val键汇总到一个包含两个键的累积值的新映射
这就是我到目前为止所做的:
list = [
%{count: 1, val: 12},
%{count: 3, val: 7},
%{count: 1, val: 5},
%{count: 2, val: 3},
%{count: 2, val: 5},
%{count: 1, val: 3}
]
x = &%{count: &1, val: &1}
sumCount
标签: Elixir
phoenix-frameworkpublish-subscribe
我最近根据文档升级了项目中的pubsub依赖项,但每当我运行服务器时都会出现以下错误:
an exception was raised:
** (ArgumentError) unknown registry: Demo.PubSub
(elixir 1.10.2) lib/registry.ex:1239: Registry.info!/1
(elixir 1.10.2) lib/registry.ex:920: Registry.register/3
(phoenix
为了计算两个日期之间的年数,我在iex上编写了以下代码:
>date1 = {{2016,3,21},{0,0,0}}
>date2= {{1983,12,27},{0,0,0}}
>:calendar.time_difference(date1,date2)
返回两个日期之间的天数。是否有其他方法来计算差异?Erlang日期处理非常糟糕,因此最好使用一些外部库来管理日期。比如说
JoséValim还表示,他们为长生不老药推出了统一的日期/时间LIB,因此他们可能已经为下一个
我发现了这个关于使用异位的链接。
.
模式已经在数据库中创建,为什么要在这里声明?在使用odbc/jdbc/odac驱动程序时,我们使用类似于stmt的exto.Adapters.SQL.query,并且不那么复杂和简单
那么您在哪里提供stmt:exto.Adapters.SQL.query(YourRepo,“SELECT$1”[1])?
它在web/models/abc.ex中吗?
你是如何得到结果的?
您能否介绍一下使用direct SQL无法从CTO中获得的一些好处?请您用更详细的描述
我是Elixir1.3.2和Phoenix 1.2.1的新手,在完成教程后,我正在尝试将用户对象(地图)发布到Phoenix。我用的是邮递员和正确的网址。起初,我尝试了一个带有json对象的原始主体,但随后出现了一个缺少键的异常:预期键“user”出现在params中,请发送预期键或调整您的scrub_params/2调用
然后,我在postman中使用了formdata选项,其中有一个键:“User”和一个值:{email:foo@bar.be,密码:“s3cr3t”}。这导致elixir A
我正在使用ex_admin,启动Phoenix服务器时遇到问题。我正在与Hound建立集成测试。ex_admin在测试/支持框架中有一个Phoenix端点。当我将endpoint server的配置设置为true时,我得到一个错误:
** (EXIT from #PID<0.70.0>) shutdown: failed to start child: Phoenix.Endpoint.Server
** (EXIT) shutdown: failed to start
我正在创建一个简单的服务,它从用户列表中接收电子邮件地址并查找用户
这是一个简化版本,包含用户列表。我想根据用户的电子邮件地址提取用户
def endpoint do
[%{email: "foo@example.org", account_type: "full"},
%{email: "bar@earxample.org", account_type: "standard"},
%{email: "baz@example.org", account_type: "full
标签: Elixir
phoenix-frameworkelixir-mix
我对长生不老药和凤凰都是新手。目前,我对从私人或本地混合项目下载或使用库有一些担心。
假设我的lib项目名称为:my_custom_mix_app,它是一个OTP app,使用gen_server。我希望它能够像下面我的phoenix应用程序中的代码片段一样
defp deps do
[{:phoenix, "~> 1.2.1"},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_ecto, "~> 3.0"},
{
标签: Elixir
otperlang-supervisorgen-server
因此,看看这些例子,我有点困惑:
elixir文档()似乎建议您只需使用“use Supervisor”宏即可构建监督树
但我在博客帖子/随机互联网搜索中看到的所有例子都“使用Genserver”。那么,监督树是否必须使用Genserver接口
我想我需要一些指向正确方向的指针,可能是要查看的代码或更清晰的示例。在复杂应用程序中设计监控树可能是构建opt应用程序最具挑战性的方面之一。然而,在大多数情况下,我发现大多数应用程序都需要这种复杂性
首先,把监管者的概念和他们监督的过程结合起来。i、 e
我已经用Phoenix+Elixir构建了一个应用程序,并用distillery将其部署到服务器上。
在我尝试创建一些bash脚本来自动化部署之前,一切都很顺利,仅供参考:我已经尝试过了,但它不符合我的需要。
当我登录并运行时,尝试在我的VPS上以守护程序模式运行应用程序时,我总是成功的
sudo my_app/bin/app start
但是,当我使用远程命令运行ssh时
ssh user@some_ip -C "sudo my_app/bin/app start"
它无法启动,shell
我有一个账户表,它链接到电子邮件表,大致如下:
%{
username: "test",
password: "secret",
emails: %{email: "test@123.com"} //<- nested
}
目前,我对帐户的更改集使用cast\u assoc拉入电子邮件:
|> cast_assoc(:emails, required: true, with: &Email.changeset(&1, &2))
但
我想在具有多个的多事务中插入一个列表。比如:
Ecto.Multi.new()
|> Ecto.Multi.insert(:main, Main.changeset(%Main{}, attrs))
|> Ecto.Multi.insert(:child, fn %{main: main} ->
Ecto.build_assoc(main, :child, %{name: "aaa"}) # inserts just one
end)
|> Ecto.Multi.ru
我有一个使用Phoenix用Elixir编写的API服务。它具有以下端点:
接收字符串参数
检查结果是否已存在于缓存中(DB或文件,参数为cache key):
如果是,请立即返回结果
如果否,则执行对第三方服务的外部请求,处理请求响应,缓存结果,然后返回
它工作得很好。但现在我想在并发请求之间共享结果:如果有一个请求a正在等待第三方服务响应或处理结果,那么具有相同参数的其他请求不应该执行相同的任务,它们应该等待来自请求a的结果
如果有人能帮我找到解决方案,我将不胜感激。只需将调用第三方服务
标签: Elixir
conditional-statements
我想将以下函数放在一个函数中:
def discount(:standard), do: &standard/1
def discount(:bronze), do: &bronze/1
def discount(:silver), do: &silver/1
def discount(:gold), do: &gold/1
大概是这样的:
def discount(:rank) do
cond do
:standard -> &a
我有以下代码:
def edit(conn, params) do
with m1 <- Repo.get(Model1, params["model1_id"]),
m2 <- Repo.get(Model2, params["model2_id"]),
!is_nil(m1) and !is_nil(m2)
do
# 1
res = !is_nil(m1) and !is_nil(m2)
IO.put
上一页 1 2 ...
78 79 80 81 82 83 84 ...
下一页 最后一页 共 125 页