我不知道是否有是创建表单对象的方式Elixir和Phoenix框架?我想实现类似于reformgem所做的事情,Rails因为我不喜欢在每种情况下都运行相同的验证,这导致了我的经验中的复杂代码.那么我可以创建类似下面的内容并以某种方式使其工作吗?
defmodule RegistrationForm do
defstruct email: nil, password: nil, age: nil
import Ecto.Changeset
def changeset(model, params \\ :empty) do
model
|> cast(params, ["email", "password", "age"], ~w())
|> validate_length(:email, min: 5, max: 240)
|> validate_length(:password, min: 8, max: 240)
|> validate_inclusion(:age, 0..130)
end
end
Run Code Online (Sandbox Code Playgroud) 我有一些验证套接字:
defmodule Test.UserSocket do
use Phoenix.Socket
## Channels
channel "user:*", Test.RoomChannel
def connect(_params, socket) do
case Phoenix.Token.verify(socket, "user", _params["token"]) do
{:ok, uid} ->
{:ok, assign(socket, :user_id, uid)}
{:error, _} ->
:error
end
end
def id(_socket), do: "user:#{_socket.assigns.user_id}"
end
Run Code Online (Sandbox Code Playgroud)
并在连接套接字后命名为 user:#id
从文档中我可以发送断开连接事件
Test.Endpoint.broadcast("users_socket:" <> user.id, "disconnect", %{})
问题:如何将自定义事件发送到套接字user:#id,它应该像是对特定套接字的推送通知.
我试过Test.Endpoint.broadcast "user:1", "new:msg", %{user: "SYSTEM", body: "iex"}但它不起作用,因为我无法在套接字上听"new:msg".
我们正尝试将edeliverPhoenix Web应用程序的"热升级"部署到远程虚拟机实例.
我们的目标是每次都构建应用程序的"升级"版本,以便应用程序可以在生产中"热"升级而无需任何停机时间.
我们成功地在"Hello World"凤凰应用程序上进行了"热升级":https: //github.com/nelsonic/hello_world_edeliver,当构建通过时,它会自动从Travis-CI部署.请参阅:https://travis-ci.org/nelsonic/hello_world_edeliver/builds/259965752#L1752
因此,理论上这种技术应该适用于我们的"真实"应用程序.
执行以下命令(构建升级):
mix edeliver build upgrade --auto-version=git-revision --from=$(git rev-parse HEAD~) --to=$(git rev-parse HEAD) --verbose
Run Code Online (Sandbox Code Playgroud)
即"构建从以前的git版本到当前版本的升级"
到现在为止还挺好." 发布成功! "

vm.args: No such file or directory当我们尝试部署升级时:
mix edeliver deploy upgrade to production --version=1.0.3+86d55eb --verbose
Run Code Online (Sandbox Code Playgroud)

cat: /home/hladmin/healthlocker/releases/1.0.3+86d55eb/vm.args: No such file or directory
Run Code Online (Sandbox Code Playgroud)
注意:我们有一个小的bash脚本,它读取可用的最新升级版本
.deliver/releases并进行部署,看看:version.sh
有没有办法忽略vm.args文件的缺失并继续部署?
或者,如果需要文件来完成部署,是否有一些关于如何创建文件的文档? …
这是我尝试过的.
date = Ecto.DateTime.from_erl(:calendar.universal_time())
query |> where([record], record.deadline >= ^date)
Run Code Online (Sandbox Code Playgroud)
我也试过了
date = Ecto.DateTime.from_erl(:calendar.universal_time())
query = from m in MyApp.SomeModel,
where: m.deadline >= ^date,
select: m
Run Code Online (Sandbox Code Playgroud)
两者都返回相同的消息
value `%Ecto.DateTime{..}` in `where` cannot be cast to type :datetime in query
Run Code Online (Sandbox Code Playgroud)
根据我的理解,我应该在我的查询中使用Ecto.DateTime.也许我错过了一些明显的东西?谢谢!
我使用Phoenix框架 - Step by Step,在15分钟内关注本教程Elixir博客
但我有一个问题,我不知道如何解决.我认为它与postgres有关.
我做了:
$ mix ecto.create
$ mix ecto.migrate
C:\Users\999\Documents\elixir_files\blog>mix ecto.create
** (RuntimeError) could not find executable `psql` in path, please guarantee it is available before running ecto commands
lib/ecto/adapters/postgres.ex:105: Ecto.Adapters.Postgres.run_with_psql/2
lib/ecto/adapters/postgres.ex:82: Ecto.Adapters.Postgres.storage_up/1
lib/mix/tasks/ecto.create.ex:32: Mix.Tasks.Ecto.Create.run/1
(mix) lib/mix/cli.ex:55: Mix.CLI.run_task/2
(stdlib) erl_eval.erl:669: :erl_eval.do_apply/6
(elixir) lib/code.ex:131: Code.eval_string/3
C:\Users\999\Documents\elixir_files\blog>mix ecto.migrate
[warning] the :size option when configuring Blog.Repo is deprecated, please use :pool_size instead
** (exit) exited in: GenServer.call(#PID<0.139.0>, {:query, "CREATE TABLE IF NOT EXISTS \"schema_migrations\" (\"version\" bigint …Run Code Online (Sandbox Code Playgroud) 请原谅新手问题,但我发现了许多保护功能插头的例子:
plug :assign_welcome_message, "Hi!" when action in [:index, :show]
Run Code Online (Sandbox Code Playgroud)
但我没有找到如何使用模块插件执行此操作的示例:
plug Guardian.Plug.EnsurePermissions,
handler: Mp.Api.AuthController,
admin: [:dashboard] when action in [:protected_action]
Run Code Online (Sandbox Code Playgroud)
我似乎移动的when action in [:protected_action]任何地方或者给我一个语法错误或一个未定义的函数when/2.我知道我做的事情很愚蠢,但我看不清楚!
救命!
phoenix 1.1.4
我知道Rails有一个非常可靠的约定,有多个控制器名称ex:CustomersController.Elixir似乎并不在乎,因为路由的完成方式不同.是否有一种惯用的方式来命名控制器在凤凰城?
我是Elixir和Phoenix Framework的新世界.我正在尝试关注TheFireHoseProject教程,但是在使用Ecto查询原始SQL时遇到问题.该教程说这应该工作:
defmodule Queries do
def random do
query = Ecto.Adapters.Postgres.query(
Repo,
"SELECT id, saying, author from quotes ORDER BY RANDOM() LIMIT 1",
[])
%Postgrex.Result{rows: [row]} = query
{id, saying, author} = row
%Splurty.Quote{id: id, saying: saying, author: author}
end
end
Run Code Online (Sandbox Code Playgroud)
我收到一个运行时错误,即Ecto.Adapters.Postgres.query不存在(未定义的函数).
我试图搜索Ecto文档,发现可能有一个名为run_query的函数,但它也不起作用.
我想我正在使用Ecto 1.1.4并且我没有找到任何关于如何使用Ecto查询原始SQL的好(最新)样本.
firehoseproject的链接是:http://phoenix.thefirehoseproject.com/
我在尝试创建数据库时遇到错误.我安装了postgres,我已经成功完成了一些测试项目.而且,我没有看到这个错误.任何帮助都会很棒:
错误:
~/Desktop/elixir/restore $ mix ecto.create
** (Mix) The database for Restore.Repo couldn't be created: tcp connect: connection refused - :econnrefused
21:52:23.978 [error] GenServer #PID<0.150.0> terminating
** (Postgrex.Error) tcp connect: connection refused - :econnrefused
(db_connection) lib/db_connection/connection.ex:148: DBConnection.Connection.connect/2
(connection) lib/connection.ex:623: Connection.enter_connect/5
(stdlib) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Last message: nil
State: Postgrex.Protocol
Run Code Online (Sandbox Code Playgroud) 我们正在尝试将我们的Phoenix Web App部署到Linux VM(在我们的Azure案例中)使用edeliver
我们已经使用Azure部署了一个"基本"博客应用程序,edeliver并记录了以下步骤:https:
//github.com/dwyl/learn-微软蔚蓝#部分2 -部署-您的应用程序
而当我们手动运行(" 实 ")的应用程序:https://github.com/nelsonic/healthlocker
使用上的实例MIX_ENV=prod mix phoenix.server运行良好!
当我们使用以下命令将应用程序部署并运行到Azure实例时:
mix edeliver build release --verbose
mix edeliver deploy release to production
mix edeliver start production
Run Code Online (Sandbox Code Playgroud)
我们收到一条肯定的确认消息:
EDELIVER HEALTHLOCKER WITH START COMMAND
-----> starting production servers
production node:
user : root
host : 51.140.86.5
path : /home/hladmin
response: ok
START DONE!
Run Code Online (Sandbox Code Playgroud)
但是当我们netstat -plnt按照check-running-services-on-linux的 …