下面的命令在生产模式下运行phoenix.server,并作为部署phoenix的命令给出.
MIX_ENV=prod PORT=4001 iex -S mix phoenix.server
Run Code Online (Sandbox Code Playgroud)
但是,上面的命令以交互方式运行服务器并关闭终端,阻止phoenix.server运行.如何让phoenix.server在后台运行?
我有以下型号:
# 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)
这里面的形式,我如何添加文本字段来填充我的新Foo用Bars?
以下不起作用,因为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) 我有一个帖子和评论模型.一篇帖子有很多评论,一篇评论属于帖子.
在显示个人评论时,如何访问其所属的帖子?
即在Ruby on Rails中你可以做到:
@comment = Comment.find(params[:id])
@post = @comment.post
Run Code Online (Sandbox Code Playgroud)
我怎样才能使用Phoenix Elixir框架实现这一目标?我相信我已正确设置了模型关联,但我对如何在视图或控制器中实际获取此查询感到困惑.
我有两个模型,歌曲和投票,歌曲有很多票.我想选择所有歌曲并计算每张歌曲的票数.
使用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 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'模式之间区别对待目录/文件权限?
更新:
伙计们,因为LetsEncrypt和凤凰框架迅速发展,我上面列出的问题已不再是一个问题,如果你正在使用从LetsEncrypt和凤凰1.2.0最新cerbot
但这不是原始问题的答案.
freebsd elixir web-deployment phoenix-framework lets-encrypt
使用以下步骤使用Edeliver&Distillery将我们的应用程序成功部署到虚拟机后:https: //github.com/dwyl/learn-phoenix-framework/blob/master/production-deployment.md
该应用程序运行:http://52.232.127.28/

但是当我们试图访问"帖子"路线时:http://52.232.127.28/posts
我们看到internal server error:

作为一个凤凰诺布,我不知道如何调试Prod中的日志......
我们如何在虚拟机上看到这些日志?日志在哪里,我们可以tail记录日志吗?
我一直在尝试在Elixir或Erlang中找到示例功能,以获取可填写的PDF,然后使用来自应用程序的输入数据填充它.
到目前为止,我无法在Elixir或Erlang中找到任何解决方案.
有没有人知道我们可以用来实现这个目标的好方法或模块?
提前致谢!
我正在用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,任何指针?
我正在关注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) 我有这个架构:
schema "editables" do
field :title, :string
field :content, :binary
timestamps
end
Run Code Online (Sandbox Code Playgroud)
我希望在应用程序启动时自动创建和填充几行,说我想创建:title包含以下字段的6个条目:page1,page2,......我应该这样做吗?