在做了一些练习后,我想出了一个可能不惯用的解决方案,它可以完美地编译,但性能却不符合预期
def span(xs, min, max), do: _span(xs,min,max)
defp _span([], _, _), do: []
# The following guard does not match
defp _span([head | tail],min,max) when min <= head <= max, do: [head | _span(tail,min,
假设我有两个EXTO模型(以及它们的迁移):
如果我查询了一个项目模型,例如
project = Repo.get!(Project, proj.id)
正如预期的那样,我无法访问project.client.id,因为我没有在查询中使用preload
每当我尝试访问project.client\u id时,它都返回nil。我当然应该能够访问外键id本身?
希望下面的代码能更好地说明:
client = Repo.insert!(%Client{name: "Test Client"})
pr
我已经创建了working worker,它在:elixir_串行处理程序中从Arduino获取消息,但现在我想在通道中使用它来广播接收到的数据,我可以将套接字注入:elixir_串行处理程序_info()吗
您是否对如何改进工作代码有任何建议,例如Gen_Server是必要的?当您收到数据时,请将其广播到频道的主题:
def handle_info({:elixir_serial, serial, data}, state) do
Logger.debug "received :data
标签: Elixir
phoenix-frameworkecto
我有一个与此类似的ERM:
-------- -------- --------
|ModelA|-----|ModelB|-----|ModelC|
-------- -------- --------
我通过以下方式获得ModelA及其ModelB:
modela = Repo.get(ModelA,1)
modela = preload(modela, :modelb)
现在我可以使用modela.ModelB访问ModelBs。但是我怎样才能预加载Mo
我在凤凰城有一个频道,可以输出约4KB的数据,其中很多数据都是高度重复的,我想知道是否有办法打开该频道的压缩功能
如果我使用的是phoenix控制器,这看起来相当简单,但是我还没有发现这是否可能,或者在某个频道的某个地方有记录
非常感谢。您可以为来自特定端点的响应配置gzip压缩
config :app_name, AppName.Endpoint,
http: [compress: true]
正如endpoint配置中的EndersStock设置http:[compress:true]
寻找与Ruby等效的长生不老药:
"john.snow@domain.com".index("@") # => 9
"john.snow@domain.com".index("domain") # => 10
我不认为有任何长生不老药包装,看
在此之前,您可以直接致电:
iex(1)> :binary.match "john.snow@domain.com", "@"
{9, 1}
iex(2)> :binary.match "john.snow@
我正在处理来自ProgrammingElixir(PragProg)的示例问题。问题是编写一个函数,将数字从返回到到。我的解决方案如下。但是,有时它们返回字符(相当于ascii)。我怎样才能避免这种情况,并且只返回数字
defmodule MyList do
def span(), do: []
def span(from), do: [from]
def span(from, to) when from == to, do: [from]
def span(from, to)
Elixir 1.3引入了命令式赋值的弃用,这意味着代码块类似于:
def modify(state) do
if some_condition do
state = modify_my_state(state)
end
# some other stuff may happen now here
state
end
将在编译时产生警告,因为状态超出范围。这是可以理解的。但建议的解决方案会产生以下结果:
def modify(state) do
state =
调试测试时,很容易放入一些IO。检查其中的语句,看看发生了什么。这非常有效,直到对象变得太大
当运行mix-test时,mix与iex的iex.configure[inspect:[limit:1000]]等价物是什么?iex.configure[inspect:[limit:1000]仅更改iex对输入的每个表达式进行的自动inspect调用的选项,并且不会改变实际IO的行为。检查功能。您必须在IO.inspect周围创建一个包装器,并使用它代替IO.inspect:
test "the tr
标签: Elixir
phoenix-frameworkecto
我正在试图找出在EXTO中组合名字和姓氏字段的最佳方法
在rail的活动记录中,我可以创建一个实例方法,如:
def name
self.first_name + self.last_name
end
然后,当我创建活动记录实例时,我可以使用User.name。如果我需要把名字和姓氏结合起来,或者对我的外胚层模型做一些其他的逻辑,我会怎么做呢?这是一个简单的示例,我可以动态地连接它,但是如果有更复杂的逻辑呢?您需要将exto.Schema(通常通过调用一些Repo方法获得)传递给该方法。从
我注意到Elixir的在将结果导入函数时,对于理解有一些令人惊讶的地方
例如,这些表单可以工作:
foo = fn(list) ->
for n <- list do
n + 1
end
|> Enum.reverse
end
foo.([1,2,3])
# [4, 3, 2]
foo = fn(list) ->
for(n <- list, do: (n + 1))
|> Enum.reverse
end
foo.([1,2
我正在尝试运行此查询:
select last_sd.*
from
(select distinct(sensor_id) from sensor_data) s LEFT JOIN LATERAL
(select * from sensor_data sd1 where sd1.sensor_id = s.sensor_id order by sd1.received_at desc limit 1) last_sd ON true
我得到的最接近的结果是:
from s in Io
如何在一个Elixir receive do模式匹配中编写多个语句
这项工作:
def pong sender do
receive do
x -> IO.puts("hello"); IO.puts("there"); send(sender, x)
end
end
但是如果我不能把它们放在同一条线上呢?它们可以用do end子句括起来吗?因为这不起作用:
def pong sender do
receive do
x -> do
这是我的前两个小时的长生不老药,所以这可能是一个不切实际的问题,但我在生成GenServer并使用它时遇到了一些问题。我正在使用这个模块,它监视系统中某个文件的更改,每次在该文件中添加一个新条目时,我都希望将日志转换到gen服务器,该服务器将对日志进行分析,并根据结果执行任何应该执行的操作
以下是监视更改的模块:
defmodule Test.Watcher do
use ExFSWatch, dirs: ["/var/log/"]
import Test.Receiver,
如何在phoenix项目中加载JSON fixture文件
当我尝试类似Application.app\u dir(我的应用程序“priv”)的东西时,它会给我一个编译路径,我不能在测试中使用它
是否有其他方法从“test/support/somefile.json”加载夹具文件?您可以使用\uuuuuu DIR\uuuu和路径。展开/2。例如,如果您的测试在test/controllers/page\u controller\u test.exs中,则可以使用以下方法获取test/suppor
标签: Elixir
phoenix-frameworkecto
我有多个并发任务,所有这些任务都试图检查记录是否存在,然后,如果不存在,将插入一个
不幸的是,我最终将记录重复写入数据库,因为似乎所有任务都决定记录不存在,然后所有任务都执行插入
期望的行为是,我只得到一次插入,然后,其他任务将识别出刚刚插入的记录的存在
以下是我的尝试:
alias MyApp.Parent, as: Parent
alias MyApp.Repo, as: Repo
changeset = Parent.changeset(%Parent{}, model)
case Re
标签: Elixir
otpgen-servergenstage
我在使用GenStage的演员阵容时遇到了问题。我试图从代码的不同部分向制作者提供数据,但当我尝试执行cast调用时,会出现以下错误:
ModuleName.handle\u cast/2中没有匹配的函数子句
代码如下:
def new_entry(entry) do
GenStage.cast(__MODULE__, {:new_entry, entry})
end
def handle_cast({:new_entry, entry}, {queue, [_head | tail] =
我会写字
unitlist |> Enum.filter(&(s in &1))
for u <- unitlist, s in u, do: u
或者我可以写
unitlist |> Enum.filter(&(s in &1))
for u <- unitlist, s in u, do: u
for u对于这种特殊情况,无论unitlist的值是什么,它们都是相同的——它们都接受任何可枚举项,并对每个项运行s in&1检查,并
如果我有这样一个列表:
a = [1,2,3]
b = [4,5,6]
第二个列表如下:
a = [1,2,3]
b = [4,5,6]
我希望添加以下列表,如下所示:
[1,2,3, some_atom:[4,5,6]]
所以我想要一个原子像这样出现在列表中
我正在尝试:
a ++ [some_atom: b]
它给了我输出:
[1, 2, 3 {:some_atom, [4, 5, 6]}]
如果可能的话,有人能建议我怎么做吗
谢谢您得到的是正确的结果。在Elixir中,
标签: Elixir
gen-serverdistillery
我有一个Genserver,需要先运行它,然后才能给数据播种。添加启动后挂钩在distillery发布时失败,错误是我的genserver未运行
(exit) exited in: GenServer.call(MyApp.NumberHelper, {:number, #Ecto.Changeset<action: nil, changes: .....
(退出)退出:GenServer.call(MyApp.NumberHelper,{:number,#exto.Changeset
我的Elixir应用程序中有几个文件,我想从测试覆盖率报告中排除这些文件。我现在没有使用任何花哨的覆盖工具;(虽然我不知道使用这些工具的可能性)我现在只是在使用混合测试--cover
我如何才能告诉覆盖率分析工具,给定的文件不应包含在覆盖率分析中?目前不可能直接在Elixir中执行。我知道有两个lib可以排除特定模块
Coverex
工作服
看看你是否喜欢它们。有关此主题的更多信息,请查看以下链接
标签: Elixir
phoenix-frameworktelnetcowboy
我想使用telnet测试我的phoenix应用程序,但它显示外部主机关闭了连接。非常快,telnet退出
$ telnet 127.0.0.1 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
phoenix应用程序非常简单,没有任何额外配置。如何使用telnet连接到它?Phoenix使用Cowboy作为底层Web服务器。它
我知道Phoenix可以处理错误响应并呈现相关的错误页面。但是我想通过http://localhost:4000/500.html。有没有什么好办法来代替添加新的控制器
我这样做的原因是,我有js方法来检查内容,如果失败,则重定向到错误页面
干杯您应该为它构建控制器和路由,这样您就可以重定向到该URL。为了临时查看500错误页面,为了测试它,我会调整程序,通过自定义MyApp.ErrorView将404个错误重定向到500页面
在本模块中,只需更改(或添加):
为此:
def render("4
要获取IEx中模块上所有函数的列表,我可以运行:
Map.__info__(:functions)
# or
Enum.__info__(:functions)
使用{Module}.\uuuu info\uuu(:functions)格式
如何获取所有标准lib模块的列表?如果要获取所有加载的Elixir模块,而不使用erlang模块,请在干净的IEx shell中运行以下命令:
:code.all_loaded()
|> Enum.filter(fn {mod, _} -&g
编辑:我想我要问的是怎么做:
board.members[1]。用户名=所有者
我试图将对象的所有者(由用户输入)设置为其成员,这是一个将成员名称链接到其角色的映射,两者都是字符串。这应该在创建新对象时发生
编辑:我很抱歉试图让它简单化
defmodule Vision.Boards.Board do
use Ecto.Schema
import Ecto.Changeset
schema "boards" do
field :members, :map
我对长生不老药很陌生,没有任何erlang经验(或func-y的东西),但这一点很快就会变得明显….->
iex(2)> :inets.start()
:ok
iex(3)> :httpc.request(["http://www.erlang.org"])
{:error, :no_scheme}
我不知道什么是“无计划”。
我在谷歌上搜索过no_计划之类的东西,我确信这是显而易见的,但我真的什么也没找到。我能在erlang文档中找到的唯一模糊相关的东西是->
iex(4)>
标签: Elixir
phoenix-frameworkecto
Ecto在更新has_one关联时给了我一个错误:
有关模型:
defmodule Something.Parent do
has_one :thing, Something.thing
@required_fields ~w(field1 field2 thing)
end
控制器更新操作
def update(conn, %{"id" => id, "parent" => parent_params}) do
我当前的解决方案是使用_index运行,然后在阵列上运行reduce
5..10
|> Stream.with_index
|> Enum.reduce(0, fn(num_idx, acc) ->
{num, idx} = num_idx
acc + num * idx
end)
是否有一种方法将元素的索引附加到元素,然后在数组上运行reduce?您必须记住,Enum.reduce函数必须有两个参数。因此,您需要做出相应的更改
你做的很好。根据
我试图在Phoenix EEx共享模板(我重用的模板)中传递值。到目前为止,还不错,但现在我想让其中一些是强制性的,而另一些是可选的。例如:
<a href="<=% @url %>" class="core Item <%= className %>">
url应该是强制性的-这是默认设置(OK)
className应该是可选的-我不能这样做,因为如果在调用模板时不包含它
()
有个错误。
我该怎么做
使用@class\u name(按照惯例,变量应
为什么我不能在guard中使用字符串或其他模块
代码:
当我希望使用模块功能时,如何优雅地重新格式化这种情况?来自:
有效的保护表达式集(有时称为保护测试)是有效Erlang表达式集的子集。限制有效表达式集的原因是必须保证对保护表达式的求值没有副作用
长生不老药也是如此
好消息是,对于您的特定用例,有一个保护可以工作:
def foo(s1, s2) when byte_size(s1) == byte_size(s2) do
通常,当您想做的事情无法在防护中使用时,您需要检查函数内部,例如
(如果我关于二进制文件的术语不适用,我深表歉意-我仍在开始使用长生不老药)
在解决其中一个问题时,我注意到String.replace以及Regex.replace显然在使用[:alnum::字符类时将德语Umlauts转换为二进制:
iex(1)> String.replace("ö", ~r/[[:alnum:]]/, "_")
<<95, 182>>
iex(2)> String.replace("ö", ~r/[^[:alnum:]]/, "_")
&
我试着通过:IEX-S mix和IEX-S mix phoenix.server打开IEX
这是我的用户接口:
defmodule Final.UserSocket do
use Phoenix.Socket
channel "keywords*", Final.KeywordsChannel
transport :websocket, Phoenix.Transports.WebSocket
def connect(_params, socket) do
我有多个任务试图同时读取并更新.json文件。在数据库场景中,我只需将锁放在一行上。。。可以用文件做类似的事情吗
我知道这可以通过genserver handle_调用来解决,我有更简单的选择吗?没有任何机制可以锁定文件的特定行,我知道也没有elixir json库可以锁定json结构中的特定元素。您必须构建自己的数据elixir表示,并执行诸如“签出”和“签入”结构中的元素之类的操作,或者在流程中包装结构的每个子部分
在编写elixir/erlang/otp时,您也应该忘记thread这个词。
我有一个非常简单的Elixir项目,其中包含一个函数primes\u table。这是它的第一部分
def primes_table(n) do
header_row(n) <> rows(n)
end
def header_row(n) do
"|" <> pad("", n) <> header_row_columns(n) <> "\n"
end
从命令行调用时:
$ ./primestable 3
|
标签: Elixir
phoenix-frameworkelixir-poison
我使用phoenix作为JSON API。我的一个模型如下所示,除非唯一约束检查失败,否则该模型运行良好。发生这种情况时,我会出现以下错误:
(Poison.EncodeError) unable to encode value: {"Email address is already registered", []}
型号:
defmodule MyApp.Registration do
use MyApp.Web, :model
@derive {Poison.Encoder, o
因此,我理解在Elixir中定义模块属性时,语法是@myvariable 30,但是,在我的情况下,假设我的模块定义如下:
defmodule MyModule do
def add(x,y), do: x + y
@myvariable add(3,4)
def print, do: @myvariable
end
理想情况下,这应该打印出7,但是我得到一个编译器错误:未定义的函数add/2
在我的具体例子中,我想存储为属性的值是一个有点大的映射,因此不像add(3,4)那
标签: Elixir
phoenix-frameworkphoenix-channels
我现在正在开发聊天功能,想知道是否有一种通过WebSocket发送文件的简单方法
到目前为止,我一直很不成功,我让它在http上工作得很好,但它似乎从来没有收到我的文件,当它到达我的websocket的另一端时
另外,使用WebSocket来回发送文件是一个好主意,还是当有人想要上传文件时,我应该坚持使用http?这是一个相当麻烦的问题,因为您必须将文件拆分成块并编码,分别发送块,然后在另一端重新组装它们。如果您能够使用HTTP(例如从客户端到服务器),只需向服务器发送一条消息,表明您对上载文件
标签: Elixir
integration-testingphoenix-frameworkphoenix-channelsex-unit
我有以下phoenix频道,它处理传入消息,广播消息,然后更新频道实例的socket状态:
defmodule MyApp.MyChannel do
use MyApp.Web, :channel
def join("topic", _payload, socket) do
{:ok, socket}
end
def handle_in("update", %{"new_number" => number_}, socket) do
broadcast
标签: Elixir
phoenix-frameworkplug
在升级到我的system-MAC之后,我的phoenix应用程序编译得很好,但在我遇到任何路径时都会抛出这个错误
服务器:localhost:4000(http)请求:GET/
**(退出)引发了一个异常:
**(UndefinedFunctionError)函数:crypto.rand_bytes/1未定义或私有。你的意思是:
* rand_seed/0
* rand_seed/1
(crypto) :crypto.rand_bytes(20)
(plug) lib/
当一个insert未能满足数据库级别的约束时,我依靠EXTO返回一个错误
是否可以根据Ecto返回的错误类型运行不同的代码
case Repo.insert(changeset) do
{:ok, _} ->
IO.puts("inserted")
{:error, message} when is_certain_ecto_error ->
IO.puts("database constraint er
使用Plug.Test.conn,设置请求正文似乎不起作用
这是插头:
defmodule MyPlug do
import Plug.Conn
def init(_), do: nil
def call(conn, _) do
{:ok, body, _conn} = read_body(conn)
send_resp(conn, 200, "body: #{body}")
end
end
使用curl:
$ curl -X POST -d foo=bar
我想创建一个在开始时需要多个状态的GenServer。特别是init函数启动计时器,计时器需要知道一些初始状态。我知道GenServer.start\u link的第二个参数直接传递到init(arg)
但是,我找不到一个示例来说明如何在中传递多个state参数,以便在init中进行初始化。例如,可取的是:
defmodule Application.Test do
require GenServer
def start_link(state1, state2) do
Gen
在“Programming Elixir 1.6”中,有以下示例:
authors = [
%{name: "José", language: "Elixir"},
%{name: "Matz", language: "Ruby"},
%{name: "Larry", language: "Perl"}
]
languages_with_an_r = fn (:get, collection, next_fn) ->
for row <- collection do
是否有可能捕获导致此异常的handle\u events中可能出现的错误
[error] GenServer #PID<0.1278.0> terminating
闻起来像是XY问题。是否要阻止它终止?到底是什么导致了这个错误?的permission子句是否可以处理事件接受一切帮助?您如何准确地处理事件?请至少显示您的处理程序\u事件的内容。想象一个事件流到达处理程序\u事件,其中一个事件不知何故损坏,它终止了genserver,从而避免处理其余事件。损坏意味着什么?似乎您的处理程
Elixir 1.7.3(使用Erlang/OTP 19编译)
我对以下代码运行mix format lib/hello\u web/router.ex:
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
end
结果如下:
pipeline
如何重新编译和重新加载IEx(杀死所有进程)。当我退出控制台并再次启动它时,我将达到相同的行为,但不离开IEx
我在功能上做得很好
IEx.Helpers.recompile()
Process.exit self, :kill
但我收到了一条红色消息:(退出#PID)shell进程退出,原因是:已杀死
这很烦人。看起来IEx.Helpers模块中没有重新启动所有进程的功能。但是,您可以使用应用程序模块功能来停止/启动混合应用程序
建议的解决办法是:
Application.sto
嗨,我正在学习elixir atm(刚刚开始),我从来没有做过函数编程,所以我的问题是函数名后面的括号做什么。
我正在看一些网络课程,想尝试制作一些用于培训的应用程序,但我真的不明白
defmodule Cards do
def create_deck do
values = ["Ace","Two","Three", "Four", "Five"]
suits = ["Spades", "Clubs", "Hearts", "Diamonds"]
for s
我有一个映射/结构数据:
%{foo: "102", zoo: "103", bar: "104"}
我想迭代映射并将值更新为整数,我应该怎么做
result = %{foo: 102, zoo: 103, bar: 104}
干杯说您的地图被定义为“我的地图”:
Enum.into(Enum.map(my_map, fn ({key, value}) -> {key, String.to_integer(value)} end), %{})
这将迭代映射,将其值重新映射为整数,然后
标签: Elixir
phoenix-frameworkphoenix-channels
我正在尝试创建一个Phoenix频道,它只包含一个用户可以订阅的时钟
defmodule MyWeb.TimeChannel do
use Phoenix.Channel
def join("room:time", _message, socket) do
schedule_heartbeat()
{:ok, socket}
end
def handle_info(_, socket) do
broadcast!(socket, "update", %{
我想在Pheonix Elixirr中展示两张桌子的参考资料,而且似乎离实际获得它还有一步之遥
有三个相互关联的表格:
主表是Clients。客户有请求。请求具有RequestType,这是一个查找表
在客户机模板中,您希望显示客户机发出的请求列表。在Show模板中,有一个循环,如下所示:
<ul>
<%= for request <- @client.requests do %>
<%= request.request_date
上一页 1 2 ...
37 38 39 40 41 42 43 ...
下一页 最后一页 共 125 页