在elixir中创建前景过程的最佳方法是什么,该过程在每个给定的时间内打勾?
我的主要问题是这样的方法:
defmoulde Ticker do
def tick do
do_something()
:timer.sleep(1000)
tick
end
end
Run Code Online (Sandbox Code Playgroud)
工作,但设计错了.它肯定不会每秒都在滴答作响,但是每秒都会增加do_something()的时间.我可以产生一个处理"某事"的过程,但仍有一个小的滞后.
此外,我正在尝试构建一个混合应用程序,有一些GenServers参与,以及一个主要的前台进程(我在这里问的那个)应该每隔x秒调用一次服务器.有这样的otp方式吗?
我想title在凤凰城的子视图/控制器中设置应用程序模板中的标记.
该title标签是内部的web/templates/layout/app.html.eex模板,但我有一个ArticlesController这使得在<%= @inner %>Rails中来的时候,会用yield电话,但无法找到其在凤凰城等价的.
将属性从其子项传递到父模板/视图的正确方法是什么?
给定一个整数,98749287说,是否有一些内置/ libray函数,Erlang或Elixir,用于获取字节大小?
澄清一下,用于表示二进制数的最小字节数.
看起来很简单,并且已经使用"基于分区"方法编写了一个函数,然后计算了位,但是经过一些搜索后,文档还没有找到任何看似有用的东西.
这是一个理论问题,但假设数据结构不能改变,这肯定是我们想要进行查询的方式.这个问题更多的是为了更好地理解如何where动态组合过滤器而不是实际想要从这样的查询中获取结果.
想象一个带有Car表的数据库,其中每辆车都有一个manufacturer_id包含ID 的列,例如"BD324"或"GM512",其中"BD"和"GM"被视为前缀.
我们需要在汽车表上进行查找,以便当汽车的manufacturer_id前缀与给定的一组前缀匹配时返回汽车.所以,给出一个前缀列表:
prefixes = ["BD", "GM", "EX", "RD", "DE"]
Run Code Online (Sandbox Code Playgroud)
..we'd想返回有所有汽车manufacturer_id与启动任何所列出的那些.即(如x 或类似y 或类似z).
以下Elixir/Ecto代码将搜索一个前缀:
search_prefix = Enum.at(prefixes, 0) <> "%"
from c in Car, where: like(c.manufacturer_id, ^search_prefix)
Run Code Online (Sandbox Code Playgroud)
我们如何where根据prefixes列表建立条款?
我试图基于其域获取网站的标识符,但在为其编写插件后,我遇到了一个问题,其中系统中的所有链接都返回根URL内容.
LIB/MyApp的/插头/ request_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.host
if host == "ll.com" || host == "domain1.com" do
slug = "domain1"
else
slug = "domain2"
end
conn |> put_private(:site_slug, slug)
end
end
Run Code Online (Sandbox Code Playgroud)
在lib/myapp/endpoint.ex中
plug Myapp.Plug.RequestVar, Myapp.Router
plug Myapp.Router
Run Code Online (Sandbox Code Playgroud)
这个插头有什么问题吗?
编辑:根据响应修复"if"条件.
如何查看路径的输出iex?
我知道我可以做到这一点,mix Phoenix.routes但我想以交互方式做到这一点.
这是我想做的一个例子:
iex -S Phoenix.server
mymodel_path
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
** (CompileError) iex:2: undefined function mymodel_path/0
Run Code Online (Sandbox Code Playgroud) 我正在玩一个使用phx 1.3和伞形应用程序的新产品套件的架构.
我有一个基于Phoenix的企业级WebRTC软电话(许多按键,一个显示器,多个输入和输出音频设备选择等).我用Phoenix开发了一个Slack克隆消息传递应用程序原型.这两个应用程序相当大我需要将手机与聊天应用程序集成到一个前端,可能只是手机,只是聊天客户端,两者都是.我需要向聊天客户端添加许多新功能,我还希望该体系结构支持使用同一客户端在呼叫服务器上设置其他设置(基于用户)以及可能的大量管理级别设置.我可能也会在未来添加其他应用程序,如操作员面板,日志查看器,列表继续...客户端JS非常简单,没有前端框架.我渲染模板服务器端并通过频道推出html.
我想建立这个可插拔的.相同的端点和数据库.一个常见的UX.
我认为伞中有两个常见的应用程序,一个用于Phoenix端点和一对控制器,另一个用于主要的Repo和一些模式.我试图弄清楚为每个应用程序使用两个或更多其他应用程序会有多困难.一个用于上下文和模式,另一个用于控制器,视图,模板和早午餐资源.可能是第三方API的另一个.
为了实现这一点,我需要为每个应用程序中的路由器进行动态调度.处理每个应用程序中包含的迁移的方法,可能还有更多我尚未想到的.
有人试过吗?是否有任何类似结构的开源项目?
在Elixir中,我如何记录函数将返回实现特定行为的模块?
要使用一个简单的例子,假设我创建了一个GreeterBehaviour由两个模块实现的行为:
defmodule GreeterBehaviour do
@callback say_hello(String.t) :: String.t
end
defmodule FormalGreeter do
@behaviour GreeterBehaviour
def say_hello(name) do
"Good day to you #{name}"
end
end
defmodule CasualGreeter do
@behaviour GreeterBehaviour
def say_hello(name) do
"Hey #{name}"
end
end
Run Code Online (Sandbox Code Playgroud)
然后,我想通过函数检索Greeter,轻松地换掉这些实现中的任何一个:
defmodule MyApp do
def main do
greeter().say_hello("Pete") |> IO.puts
end
@spec greeter() :: GreeterBehaviour # This doesn't work with dialyzer
def greeter do
FormalGreeter # Can easily be swapped to CasualGreeter
end
end
Run Code Online (Sandbox Code Playgroud)
Dialyzer将成功检查两者CasualGreeter并FormalGreeter正确实现该GreeterBehaviour行为.但是,我如何定义一个typespec,以便Dialyzer检查 …
我们正尝试将edeliverPhoenix Web应用程序的"热升级"部署到远程虚拟机实例.
我们的目标是每次都构建应用程序的"升级"版本,以便应用程序可以在生产中"热"升级而无需任何停机时间.
我们成功地在"Hello World"凤凰应用程序上进行了"热升级":https: //github.com/nelsonic/hello_world_edeliver,当构建通过时,它会自动从Travis-CI部署.请参阅:https://travis-ci.org/nelsonic/hello_world_edeliver/builds/259965752#L1752
因此,理论上这种技术应该适用于我们的"真实"应用程序.
执行以下命令(构建升级):
mix edeliver build upgrade --auto-version=git-revision --from=$(git rev-parse HEAD~) --to=$(git rev-parse HEAD) --verbose
Run Code Online (Sandbox Code Playgroud)
即"构建从以前的git版本到当前版本的升级"
到现在为止还挺好." 发布成功! "

vm.args: No such file or directory当我们尝试部署升级时:
mix edeliver deploy upgrade to production --version=1.0.3+86d55eb --verbose
Run Code Online (Sandbox Code Playgroud)

cat: /home/hladmin/healthlocker/releases/1.0.3+86d55eb/vm.args: No such file or directory
Run Code Online (Sandbox Code Playgroud)
注意:我们有一个小的bash脚本,它读取可用的最新升级版本
.deliver/releases并进行部署,看看:version.sh
有没有办法忽略vm.args文件的缺失并继续部署?
或者,如果需要文件来完成部署,是否有一些关于如何创建文件的文档? …
给定一个浮点数,比方说(2.0),我想将它转换为Integer类型.就我所知,Integer.parse看起来只适用于字符串.
Integer.parse(2.0)
(FunctionClauseError) no function clause matching in Integer.count_digits/2
Run Code Online (Sandbox Code Playgroud) elixir ×10
deployment ×1
distillery ×1
ecto ×1
edeliver ×1
erlang ×1
erlang-otp ×1
eventemitter ×1