标签: phoenix-framework

我应该使用哪种OTP行为来"无休止"重复任务?

我希望在凤凰应用程序旁边反复运行相同的操作序列(当然,如果某些东西在工作者中刹车,则不会崩溃整个网络应用程序)并且我真的不知道我应该使用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的东西,并希望你们中的某些人可以帮助我在这里绊倒正确的方向.

elixir erlang-otp phoenix-framework

20
推荐指数
1
解决办法
1856
查看次数

凤凰:渲染其他文件夹的模板

我的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)

请告诉我如何渲染在其他文件夹中定义的模板,我尝试了几个排列,但没有一个工作.

templates elixir web-deployment phoenix-framework

20
推荐指数
1
解决办法
5988
查看次数

如何比较Elixir和Ecto的日期

我有一个Ecto.DateTime来自数据库列的实例,我需要检查这个日期是否超过5分钟.

最好的方法是什么?

为了更清楚,这是我在ruby中所需要的 - >

updated_at < (Time.now - 5.minutes)
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

19
推荐指数
1
解决办法
2715
查看次数

Phoenix中的原子键与字符串键

在新的Programming Phoenix书中,Chris McCord说这是关于使用字符串和原子键来控制器动作参数:

在我们控制器的world动作中,外部参数有字符串键,"name"=> name,而在内部我们使用name:name.这是整个凤凰城遵循的惯例.外部数据是不安全的,所以我们明确匹配的字符串键,然后我们的应用程序边界像控制器和渠道将它们转换成原子键,我们将依靠其他地方里面凤凰.

但是,我不清楚为什么使用字符串键比原子键更安全.为什么字符串键在这里更安全?

elixir phoenix-framework

19
推荐指数
1
解决办法
2009
查看次数

生产环境中的Mix.env/0等价物?

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)

elixir phoenix-framework

19
推荐指数
1
解决办法
4330
查看次数

多态关联如何与Ecto一起使用?

当我阅读https://github.com/elixir-lang/ecto/issues/389及其相关问题时,Ecto似乎支持多态关联.

假设我需要在任务和事件模型上建立注释模型关联.如果我对Ecto与自定义源的关联是正确的,那么我们需要四个表和三个模型,

  • 任务
  • 事件
  • tasks_comments
  • events_comments

模型

  • 任务
  • 事件
  • 评论

任务和事件模型将具有与自定义源的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关联?

elixir phoenix-framework

18
推荐指数
1
解决办法
3628
查看次数

如何从凤凰城的环境文件中获取变量值?

我正在部署我的第一个Phoenix应用程序,并且我在环境文件(dev.exsprod.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-framework

18
推荐指数
1
解决办法
1万
查看次数

如何在Phoenixframework中使用RethinkDB?

刚到Elixir/Phoenix我想使用RethinkDB而不是PostgreSQL,但我只在PostgreSQL上找到文档/示例(它似乎是默认/官方数据库).Hamiltop(Rethinkdb-elixir)提供了一个非常好的软件包,但遗憾的是Wiki中的文档还没有准备就绪,而自述文件对我来说还不够.我绝对不想使用SQL(我来自使用Meteor/MongoDB,其中数据库不是问题).谁能告诉我一个我需要的代码的简单示例:

  1. 连接到RethinkDB;
  2. 启动服务器/管理服务器/连接;
  3. 创建数据库/表;
  4. 执行基本的CRUD操作.

这可能听起来很傻但是Meteor为我们照顾这些,现在这对我来说是一个问题...因为我无法正确地做到这一点.谢谢!

elixir rethinkdb ecto phoenix-framework

18
推荐指数
1
解决办法
1812
查看次数

如何在Phoenix框架中有选择地禁用CSRF检查

我正在尝试创建指向我网站的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中做到这一点?

csrf elixir csrf-protection phoenix-framework

18
推荐指数
1
解决办法
3275
查看次数

Docker错误:standard_init_linux.go:185:exec用户进程导致"没有这样的文件或目录"

我正在尝试使用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)

postgresql elixir docker phoenix-framework docker-compose

18
推荐指数
1
解决办法
6964
查看次数