我正在尝试永远运行我的Phoenix应用程序,即独立于我的终端进程.我在Phoenix指南和Stackoverflow中看到了我可以使用的问题elixir --detached,但是我无法正确使用这些命令.事实上,我曾经能够像这样开始它,但我尝试了很多命令,我甚至不知道哪一个命令(也因为没有消息要说清楚).因此,使用最新版本的Phoenix(1.1)和Elixir(1.1.1),有哪些命令:1)永远启动服务器(作为守护进程); 2)停止服务器而无需重启服务器?
从我的布局(app.html.eex文件)中,我想渲染位于我的模板文件夹(示例结构)中的子文件夹(第二级文件夹)内的模板:
/templates/layout
/templates/layout_module/header_footer/fad.html.eex
Run Code Online (Sandbox Code Playgroud)
我有所有第一级文件夹 ( layout, layout_module,...) 的视图。我正在使用:
<%= render FabricaASA.Layout_moduleView, "/header_footer/fad.html" %>
Run Code Online (Sandbox Code Playgroud)
我尝试了一些替代方案但没有成功。最好的方法是什么?
我只是用数据库和查询(从前端推出)开始,我想选择包含特定领域的最新条目title,说Page1.我知道我有两个可以帮助我的领域:1)created_at- 我可以订购它只选择最新的; 2)id- 我知道每个条目都会生成一个新条目,id所以我可以获得最大的条目id; 我想将它应用于"标准"编辑控制器操作:
def edit(conn, %{"id" => id}) do
user = Repo.get(User, id)
changeset = User.update_changeset(user)
render(conn, "edit.html", user: user, changeset: changeset)
end
Run Code Online (Sandbox Code Playgroud)
所以我想知道哪种方法更好,并查看查询示例.
我正在尝试在Phoenix EEx共享模板中传递值(我重用的模板).到目前为止,这么好,但现在我想使其中一些是强制性的,而另一些是可选的.例如:
<a href="<=% @url %>" class="core Item <%= className %>">
Run Code Online (Sandbox Code Playgroud)
url 应该是强制性的 - 这是默认的(OK);className应该是可选的 - 我不能成功,因为如果我在调用模板时没有包含它(<%= render MyProject.SharedView, "myTemplate.html", url:"logo2.png" %>)则会出错.我怎样才能做到这一点?我试图在VPS中以生产模式启动Phoenix应用程序(在开发模式下可以),因此,在编译我的应用程序资产后,我运行:
PORT=4001 MIX_ENV=prod mix phoenix.server
Run Code Online (Sandbox Code Playgroud)
我得到:
** (Mix) Could not start application myapp: could not find application file: myapp.app
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我正在尝试从<%= @evento %>模板中的列表()中提取值,但出现此错误:
lists in Phoenix.HTML and templates may only contain integers representing bytes, binaries or other lists, got invalid entry: %Skeleton.News.Evento{__meta__: #Ecto.Schema.Metadata<:loaded, "news_eventos">, date: "DEZ 2011", id: 69, imgPaths: ["images/fabasa/eventos/one/1.jpg", "images/fabasa/eventos/one/2.jpg", "images/fabasa/eventos/one/3.jpg", "images/fabasa/eventos/one/10.jpg"], inserted_at: ~N[2017-06-30 12:38:15.452214],...
Run Code Online (Sandbox Code Playgroud)
因此,我的问题是如何将其转换为仍可在模板中迭代的数据类型结构?
如果我们不在主页上,我想显示菜单图标.我知道我需要使用这样的东西:
<div class="header">
<%= if page_path(@conn) === "/" do %>
# Do nothing
<% else %>
<%= render Myproject.SharedView, "menuButton.html" %>
<% end %>
</div>
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为page_path (@conn)它应该根据控制器动作给我们路由:page_path (@conn, :index)而不是浏览器请求的路由.所以我的问题是:做最简单的函数是什么?
我的代码中有这个:
<%= for empresa <- @empresas do %>
<%= render myProject.ComponentView, "smallPlacard.html",
smallPlacard_id: "1",
smallPlacard_class: "Company",
smallPlacard_mainText: company.name
%>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我希望smallPlacard_id每个渲染元素都会自动递增.在凤凰城/功能方式中做到这一点的最佳方式是什么?
在看到JoséValim关于Flow & GenStage我的最后一次主题演讲之后我感到困惑,因为:
1)如果将流和GenStage添加到Elixir中是因为改善并发真的很有意义;
2)另一方面,我认为Erlang/BEAM的关键优势之一是默认情况下并发/使用所有内核,开发人员不应该担心这一点.
那么,如果Flow & GenStage还没有(还)帮助运行在不同机器上的分布式系统,有人可以解释Flow和本机Erlang/BEAM并发之间的差异吗?
我有一些客户端静态jQuery代码,我想用我的网站的每个页面上使用的服务器动态代码替换,并取决于我所在的页面(被询问的路由).我现有的jQuery代码(在模板html.eex文件中)是:
if (SOME CONDITION) {
$(".page1.firstChild").css({"margin-top": "70px"});
$(".page2.firstChild").css({"margin-top": "70px"});
$(".page3.firstChild").css({"margin-top": "70px"});
$(".page4.firstChild").css({"margin-top": "70px"});
} else {
$(".page1.firstChild").css({"margin-top": "0px"});
$(".page2.firstChild").css({"margin-top": "0px"});
$(".page3.firstChild").css({"margin-top": "0px"});
$(".page4.firstChild").css({"margin-top": "0px"});
}
Run Code Online (Sandbox Code Playgroud)
所以,我想用一个放在模板中的变量替换" .page1"," .page2",......" .pageN" <% currentPage %>并在我的layout_view中定义,以便可以在与该布局相关的每个页面上访问它.所以我尝试了这个:
defmodule myApp.LayoutView do
use myApp.Web, :view
def currentPage do
case @conn.request_path do
"/page1" -> "page1"
"/page2" -> "page2"
"/page3" -> "page3"
end
end
end
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
undefined function: nil.request_path/0
Run Code Online (Sandbox Code Playgroud)
这样做的最佳方式是什么?(我也不确定"案例"代码).