我希望在凤凰应用程序旁边反复运行相同的操作序列(当然,如果某些东西在工作者中刹车,则不会崩溃整个网络应用程序)并且我真的不知道我应该使用GenServer,Elixir的任务,代理人或者我到目前为止没有想过的完全不同的东西.
当我启动我的凤凰应用程序时,工作人员也应该启动,定期拉出一些串行连接值,通过凤凰频道广播它们,收集它们直到@save_interval达到然后计算中位数,通过不同的频道广播中位数和将它写入InfluxDB.现在我有这样的东西(有点工作):
def do_your_thing(serial_pid) do
Stream.interval(@interval_live)
|> get_new_values_from_serial(serial_pid)
|> broadcast!("live-channel:#{@name}")
|> Enum.take(div(@interval_save, @interval_live))
|> calculate_medians()
|> broadcast!("update-channel:#{@name}")
|> write_to_database()
do_your_thing(serial_pid) # repeat
end
Run Code Online (Sandbox Code Playgroud)
我只是开始想出所有OTP的东西,并希望你们中的某些人可以帮助我在这里绊倒正确的方向.
我的web/templates文件夹中有两个模板文件夹:
> ls web/templates
personal_info user
Run Code Online (Sandbox Code Playgroud)
我想要的是user在另一个视图中从文件夹渲染一些模板personal_info.所以我在路径上有一个文件:web/templates/personal_info/index.html.eex,我有以下内容:
<%= render "user/xyz.html" %>
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误:
[error] #PID<0.821.0> running MyApp.Endpoint terminated
Server: localhost:4000 (http)
Request: GET /
** (exit) an exception was raised:
** (Phoenix.Template.UndefinedError) Could not render "user/xyz.html" for MyApp.PersonalInfoView, please define a matching clause for render/1 or define a template at "web/templates/personal_info". The following templates were compiled:
* index.html
Run Code Online (Sandbox Code Playgroud)
请告诉我如何渲染在其他文件夹中定义的模板,我尝试了几个排列,但没有一个工作.
我有一个Ecto.DateTime来自数据库列的实例,我需要检查这个日期是否超过5分钟.
最好的方法是什么?
为了更清楚,这是我在ruby中所需要的 - >
updated_at < (Time.now - 5.minutes)
Run Code Online (Sandbox Code Playgroud) 在新的Programming Phoenix书中,Chris McCord说这是关于使用字符串和原子键来控制器动作参数:
在我们控制器的world动作中,外部参数有字符串键,"name"=> name,而在内部我们使用name:name.这是整个凤凰城遵循的惯例.外部数据是不安全的,所以我们明确匹配的字符串键,然后我们的应用程序边界像控制器和渠道将它们转换成原子键,我们将依靠其他地方里面凤凰.
但是,我不清楚为什么使用字符串键比原子键更安全.为什么字符串键在这里更安全?
Mix.env/0正常工作mix phoenix.server,但无法在使用exrm构建的生产环境中调用.这是有意义的,因为mix不包含在发布版本中,但有没有相当于Mix.env/0?
(UndefinedFunctionError) undefined function Mix.env/0 (module Mix is not available)
Run Code Online (Sandbox Code Playgroud)
我在一些代码中使用了这样的Mix.env/0:
if Mix.env == :dev do
# xxxxxx
else
# xxxxxx
end
Run Code Online (Sandbox Code Playgroud) 当我阅读https://github.com/elixir-lang/ecto/issues/389及其相关问题时,Ecto似乎支持多态关联.
假设我需要在任务和事件模型上建立注释模型关联.如果我对Ecto与自定义源的关联是正确的,那么我们需要四个表和三个模型,
表
模型
任务和事件模型将具有与自定义源的has_many关联,如下所示.
defmodule ExampleApp.Task do
use ExampleApp.Web, :model
schema "tasks" do
field :title, :string
field :body, :string
has_many :comments, {"tasks_comments", Comment}
timestamps
end
end
defmodule ExampleApp.Event do
use ExampleApp.Web, :model
schema "events" do
field :title, :string
field :body, :string
has_many :comments, {"events_comments", Comment}
timestamps
end
end
Run Code Online (Sandbox Code Playgroud)
现在我不明白的是评论模型应该如何?
Comment模型如何处理两个表?以及它如何处理不同模型的belongs_to关联?
我正在部署我的第一个Phoenix应用程序,并且我在环境文件(dev.exs和prod.exs)中指定了变量的值.
现在我想弄清楚如何在我的控制器中访问它们.
# config/dev.exs
config :my_app, MyApp.Endpoint,
http: [port: 4000],
debug_errors: true,
cache_static_lookup: false,
my_var: "DEVELOPMENT VALUE"
# config/prod.exs
config :my_app, MyApp.Endpoint,
http: [port: {:system, "PORT"}],
url: [host: "example.com"],
my_var: "PRODUCTION VALUE"
Run Code Online (Sandbox Code Playgroud) 刚到Elixir/Phoenix我想使用RethinkDB而不是PostgreSQL,但我只在PostgreSQL上找到文档/示例(它似乎是默认/官方数据库).Hamiltop(Rethinkdb-elixir)提供了一个非常好的软件包,但遗憾的是Wiki中的文档还没有准备就绪,而自述文件对我来说还不够.我绝对不想使用SQL(我来自使用Meteor/MongoDB,其中数据库不是问题).谁能告诉我一个我需要的代码的简单示例:
这可能听起来很傻但是Meteor为我们照顾这些,现在这对我来说是一个问题...因为我无法正确地做到这一点.谢谢!
我正在尝试创建指向我网站的Facebook页面标签.Facebook将HTTP POST请求发送到我网站的网址.这里的问题是服务器有一个内置的CSRF检查,它返回以下错误:
(Plug.CSRFProtection.InvalidCSRFTokenError) invalid CSRF (Cross Site Forgery Protection) token, make sure all requests include a '_csrf_token' param or an 'x-csrf-token' header`
Run Code Online (Sandbox Code Playgroud)
服务器需要Facebook不能拥有的CSRF令牌.所以,我想有选择地为路径www.mywebsite.com/facebook禁用CSRF.
我怎么能在Phoenix Framework中做到这一点?
我正在尝试使用postgresql数据库设置我的elixir-phoenix应用程序以使用Docker运行.这就是我的Dockerfile的样子:
# ./Dockerfile
# Starting from the official Elixir 1.5.2 image:
# https://hub.docker.com/_/elixir/
FROM elixir:1.5.2
ENV DEBIAN_FRONTEND=noninteractive
# Install hex
RUN mix local.hex
# Install rebar
RUN mix local.rebar
# Install the Phoenix framework itself
RUN mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
# Install NodeJS 6.x and the NPM
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get install -y -q nodejs
# Set /lib as workdir
WORKDIR /lib
Run Code Online (Sandbox Code Playgroud)
这是我的docker-compose.yml文件:
web:
build: .
dockerfile: Dockerfile
env_file: .env
command: mix phx.server # Start the …Run Code Online (Sandbox Code Playgroud)