在Phoenix Framework中,如何获取当前环境的名称?
我已经尝试过用env变量读取变量了System.get_env("MIX_ENV"),但是并不总是设置值.
在使用Phoenix Framework时,有没有办法在样式表中使用sass/scss?如果有,那怎么样?
在凤凰/ elixir项目中:什么是放置辅助函数的好地方.例如:我使用Timex来处理日期,但我必须对返回的结构进行一些转换,以便将它与我的数据库驱动程序一起使用(一个使用密钥:min,另一个:分钟等).我不想在每个模型中重复这段代码,而是编写一个简单的函数来完成它.什么是一个好地方放这个?只是在/ lib文件夹中的模块中?有没有关于如何组织这个的指导方针?
在我的Elixir/Phoenix应用程序中,当我跑步时
mix test
Run Code Online (Sandbox Code Playgroud)
我输出如下:
$ mix test
....
Finished in 0.09 seconds
4 tests, 0 failures
Run Code Online (Sandbox Code Playgroud)
每个测试成功的点数.
如何输出成功的测试名称?
在使用rspec的Rails中,我曾经在目录中使用.rspec文件执行此操作,该文件看起来像:
$ cat .rspec
--color
-fd
--tty
Run Code Online (Sandbox Code Playgroud)
Elixir中是否有相同的名称?
我有一个架构:
schema "editables" do
field :title, :string
field :content, :string
timestamps
end
Run Code Online (Sandbox Code Playgroud)
现在我想将一个字段表单的类型更改:integer为:binary.编写迁移的正确方法是什么,因为使用add不起作用......?
def change do
alter table(:editables) do
add :title, :binary
add :content, :binary
timestamps
end
end
Run Code Online (Sandbox Code Playgroud) 我无法创建我的凤凰项目.会喜欢一些关于如何修复它的建议.
设置细节:
我正在关注Phoenix Up and Running制作应用程序.
mix phx.new hello
cd hello
mix ecto.create
Run Code Online (Sandbox Code Playgroud)
最后一个命令给了我:
== Compilation error in file lib/hello/repo.ex ==
** (ArgumentError) adapter Ecto.Adapters.Postgres was not compiled, ensure it is correct and it is included as a project dependency
lib/ecto/repo/supervisor.ex:71: Ecto.Repo.Supervisor.compile_config/2
lib/hello/repo.ex:2: (module)
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
(elixir) lib/kernel/parallel_compiler.ex:206: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6
Run Code Online (Sandbox Code Playgroud)
我安装了postgres.我有postgres超级用户.
几天前,我开始使用Elixir和Phoenix Framework(v 0.12.0)和Postgres数据库.我正在尝试创建一个具有UUID主键的表,我更喜欢顺序默认值.
在使用mix phoenix.gen.html生成模型和迁移文件并遵循Phoenix文档中的其他步骤之后,我已经更改了
def model do
quote do
use Ecto.Model
end
end
Run Code Online (Sandbox Code Playgroud)
在web.ex以
def model do
quote do
use Ecto.Model
@primary_key {:id, :uuid, []}
@foreign_key_type :uuid
end
end
Run Code Online (Sandbox Code Playgroud)
正如Ecto文档中提到的那样.我也将迁移更改为
create table(:tblname, primary_key: false) do
add :id, :uuid, primary_key: true
[other columns]
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试从自动生成的表单向表中添加一个条目时,我收到一个错误,因为它id是null.如果我手动将id-column 添加到模型中,则会收到列已存在的错误.如果我忽略设置primary_key为false table/2并删除id列,则使用顺序id列生成表.
我是否需要id在变更集中手动设置,或者在设置我的应用程序以使用UUID时出错?提前致谢
尝试更新(或创建)记录时,我收到无效的CSRF令牌错误.我正在使用Elixir v1.0.3,Erlang/OTP 17 [erts-6.3]和Phoenix v0.8.0(我想,我不知道如何查看Phoenix的版本).我正在创建一个Web应用程序,主要遵循Phoenix指南和Elixir Dose Jobsite示例资源.但是,当我尝试从html表单发布信息时,我收到无效的CSRF令牌错误.根据错误中给出的建议,我将'x-csrf-token':csrf_token添加到操作中.
edit.html.eex:
<h2>Edit Directory</h2>
<form class="form-horizontal" action="<%= directory_path @conn, :update, @directory.id, 'x-csrf-token': @csrf_token %>" method="post">
<div class="form-group">
<label for="directory" class="col-sm-2 control-label">Directory</label>
<div class="col-sm-10">
<input type="hidden" name="_method" value="PATCH">
<input type="text" class="form-control" value="<%= @directory.directory %>" name="directory" placeholder="Directory" required="required">
</div>
</div>
...
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
[error] #PID<0.579.0> running Ainur.Endpoint terminated
Server: localhost:4000 (http)
Request: POST /config/directories/2?x-csrf-token=
** (exit) an exception was raised:
** (Plug.CSRFProtection.InvalidCSRFTokenError) Invalid CSRF (Cross Site Forgery Protection) token. Make sure that all your non-HEAD and non-GET …Run Code Online (Sandbox Code Playgroud) 我希望在凤凰应用程序旁边反复运行相同的操作序列(当然,如果某些东西在工作者中刹车,则不会崩溃整个网络应用程序)并且我真的不知道我应该使用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)
请告诉我如何渲染在其他文件夹中定义的模板,我尝试了几个排列,但没有一个工作.
elixir ×9
ecto ×3
postgresql ×2
elixir-mix ×1
erlang-otp ×1
templates ×1
testing ×1
verbosity ×1