标签: phoenix-framework

如何启动phoenix.server作为守护进程

下面的命令在生产模式下运行phoenix.server,并作为部署phoenix的命令给出.

MIX_ENV=prod PORT=4001 iex -S mix phoenix.server
Run Code Online (Sandbox Code Playgroud)

但是,上面的命令以交互方式运行服务器并关闭终端,阻止phoenix.server运行.如何让phoenix.server在后台运行?

elixir phoenix-framework

13
推荐指数
1
解决办法
5682
查看次数

插入具有has_many关联的模型

我有以下型号:

# Foo model
schema "foo" do
  field :name, :string
  has_many: :bars, App.Bar
end

# App model
schema "bar" do
  field :name, :string
  belongs_to: foo, App.Foo
end
Run Code Online (Sandbox Code Playgroud)

这个形式:

# form.html (Foo)
<%= form_for @changeset, @action, fn f -> %>
  <%= text_input f, :name, class: "form-control" %>
  <%= submit "Submit", class: "btn btn-primary" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这里面的形式,我如何添加文本字段来填充我的新FooBars

以下不起作用,因为bars没有预加载:

<%= text_input f, :bars, class: "form-control" %>
Run Code Online (Sandbox Code Playgroud)

我是在正确的轨道上吗?如果是这样,我怎么能Bars在表格中预加载?

更新,控制器:

def new(conn, _params) do
  changeset …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

13
推荐指数
1
解决办法
4104
查看次数

如何在Elixir中获得与Ecto的"belongs_to"关联?

我有一个帖子和评论模型.一篇帖子有很多评论,一篇评论属于帖子.

在显示个人评论时,如何访问其所属的帖子?

即在Ruby on Rails中你可以做到:

@comment = Comment.find(params[:id])
@post = @comment.post
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用Phoenix Elixir框架实现这一目标?我相信我已正确设置了模型关联,但我对如何在视图或控制器中实际获取此查询感到困惑.

elixir ecto phoenix-framework

13
推荐指数
1
解决办法
6863
查看次数

如何在凤凰城中将Ecto选择查询转换为结构?

我有两个模型,歌曲和投票,歌曲有很多票.我想选择所有歌曲并计算每张歌曲的票数.

使用mix gen任务生成的SongController中的索引操作已修改为:

def index(conn, _params) do
  query = from s in Song, select: %{id: s.id, name: s.name, artist: s.artist} 
  songs = Repo.all(query)
  render(conn, "index.html", songs: songs)
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下songs包含列表列表.但是在原始的生成函数中,songs = Repo.all(Song)它是一个Song结构列表.

这意味着模板中的song_path函数会出现以下错误消息: maps cannot be converted to_param. A struct was expected, got: %{artist: "Stephen", id: 3, name: "Crossfire"}

当然,我真正想做的是以某种方式num_votes在select语句中添加一个字段,然后以某种方式为Song结构创建一个相应的字段?

elixir ecto phoenix-framework

13
推荐指数
1
解决办法
4453
查看次数

Elixir Phoenix生产服务器存在Letsencrypt续订问题

我有一个用Elixir Phoenix框架工作的网站.该网站在开发和生产模式下运行良好.

当凤凰服务器在开发模式下运行,我没有问题renewingLet的加密证书,但是当完全相同的应用程序在PROD模式下运行,我不断尝试续订时,得到允许误差.请注意,我正在谈论完全相同的应用程序,在同一个 FreeBSD服务器上,由同一个用户执行- 两个命令都没有sudo.该唯一的区别是MIX_ENV=prod

我还注意到在prod模式下,凤凰服务器在Letsencrypt尝试访问我的priv/static/.well-known/acme-challenge/(some-unique-string)基本设置为phoenix + letsencrypt 时记录404错误在此博客文章中有详细说明

问题是:phoenix服务器如何在`prod'和'dev'模式之间区别对待目录/文件权限?

  • 使用Elixir 1.2.4和Phoenix 1.1.4

更新:

伙计们,因为LetsEncrypt和凤凰框架迅速发展,我上面列出的问题已不再是一个问题,如果你正在使用从LetsEncrypt和凤凰1.2.0最新cerbot

但这不是原始问题的答案.

freebsd elixir web-deployment phoenix-framework lets-encrypt

13
推荐指数
1
解决办法
1047
查看次数

如何在使用Edeliver部署的Phoenix Web应用程序中查看生产日志?

使用以下步骤使用Edeliver&Distillery将我们的应用程序成功部署到虚拟机后:https: //github.com/dwyl/learn-phoenix-framework/blob/master/production-deployment.md

该应用程序运行:http://52.232.127.28/ 凤凰-APP-运行

但是当我们试图访问"帖子"路线时:http://52.232.127.28/posts 我们看到internal server error: 凤凰内部服务器错误

作为一个凤凰诺布,不知道如何调试Prod中的日志......

我们如何在虚拟机上看到这些日志?日志在哪里,我们可以tail记录日志吗?

erlang logging elixir phoenix-framework devops

13
推荐指数
1
解决办法
3310
查看次数

在Elixir/Erlang中处理可填写的PDF

我一直在尝试在Elixir或Erlang中找到示例功能,以获取可填写的PDF,然后使用来自应用程序的输入数据填充它.

到目前为止,我无法在Elixir或Erlang中找到任何解决方案.

有没有人知道我们可以用来实现这个目标的好方法或模块?

提前致谢!

pdf erlang elixir pdf-manipulation phoenix-framework

13
推荐指数
1
解决办法
470
查看次数

在Phoenix Application中为异常设置自定义响应

我正在用ecto写凤凰应用程序,并在测试中有以下片段

{:ok, data} = Poison.encode(%{email: "nonexisting@user.com", password: "mypass"})

conn()
|> put_req_header("content-type", "application/json")
|> put_req_header("accept", "application/json")
|> post(session_path(@endpoint, :create), data)
> json_response(:not_found) == %{}
Run Code Online (Sandbox Code Playgroud)

这会抛出一个Ecto.NoResultsError

我有这个定义

defimpl Plug.Exception, for: Ecto.NoResultsError do
  def status(_exception), do: 404
end
Run Code Online (Sandbox Code Playgroud)

但测试仍然抛出Ecto.NoResultsError,任何指针?

elixir ecto phoenix-framework

12
推荐指数
2
解决办法
1779
查看次数

从Pipeline Plug调用时,Plug.Conn.assign无法正常工作

我正在关注Plugs上Phoenix Guide来创建我自己的插件Module Plug加载当前用户.在@user当使用插件模块没有被分配,但是当我把它作为一个内部私有函数工作正常router.ex.

这是我的web/router:

defmodule MyApp.Router do
  use MyApp.Web, :router

  pipeline :browser do
    plug :accepts, ["html"]
    plug :fetch_session
    plug :fetch_flash
    plug :protect_from_forgery
    plug MyApp.Plugs.User
  end

  # Scopes and Routes...

end
Run Code Online (Sandbox Code Playgroud)

这是我的模块(in web/plugs/user.ex):

defmodule MyApp.Plugs.User do
  import Plug.Conn

  def init(default), do: default

  def call(conn, default) do
    user = %{
      id:       get_session(conn, :user_id),
      username: get_session(conn, :username)
    }

    assign(conn, :user, user)

    IO.inspect conn
  end
end
Run Code Online (Sandbox Code Playgroud)

我试过检查它是否真的被分配,但它不是:

%Plug.Conn{adapter: {Plug.Adapters.Cowboy.Conn, …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

12
推荐指数
1
解决办法
3370
查看次数

如何在Phoenix应用程序启动时预先填充数据库?

我有这个架构:

schema "editables" do
    field :title, :string 
    field :content, :binary
   timestamps
end
Run Code Online (Sandbox Code Playgroud)

我希望在应用程序启动时自动创建和填充几行,说我想创建:title包含以下字段的6个条目:page1,page2,......我应该这样做吗?

elixir ecto phoenix-framework

12
推荐指数
1
解决办法
4409
查看次数