
NERDTree在tmux会话中如图所示.分割窗口时存在同样的问题.但是现在我正在使用powerline这次Vim状态在tmux中变得很糟糕(在图片中看到状态行的中间部分).怎么了?
def create(conn, %{"data" => %{"attributes" => user_params}}) do
changeset = User.changeset(%User{}, user_params)
case Repo.insert(changeset) do
{:ok, user} ->
UserMailer.send_welcome_email(user)
conn
|> put_status(:created)
|> render("show.json", model: user)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(MyApp.ChangesetView, "error.json", changeset: changeset)
end
end
Run Code Online (Sandbox Code Playgroud)
在此控制器操作中,UserMailer.send_welcome_email是同步的,请求等待.
我想让它异步,所以产生了这样的过程
spawn_link(fn ->
UserMailer.send_welcome_email(user)
end)
Run Code Online (Sandbox Code Playgroud)
请求不会等到邮件发送完毕.
Supervisor吗?spawn_link失败了,也记录在我们的凤凰日志中,它会这样做)# mix.exs
defp deps do
[{:phoenix, "~> 1.1.4"},
{:postgrex, ">= 0.0.0"},
{:phoenix_ecto, "~> 3.0.0-rc"},
{:gettext, "~> 0.9"},
...
]
end
Run Code Online (Sandbox Code Playgroud)
安装的ecto版本是 "2.0.0-rc.5"
iex(1)> categories = [%{name: "stackoverflow", url: "stackoverflow.com"}]
iex(2)> App.Repo.insert_all App.Category, categories
** (Postgrex.Error) ERROR (not_null_violation): null value in column "inserted_at" violates not-null constraint
table: categories
column: inserted_at
Failing row contains (1, stackoverflow, stackoverflow.com, null, null).
(ecto) lib/ecto/adapters/sql.ex:176: Ecto.Adapters.SQL.query!/5
(ecto) lib/ecto/adapters/sql.ex:350: Ecto.Adapters.SQL.insert_all/8
(ecto) lib/ecto/repo/schema.ex:42: Ecto.Repo.Schema.do_insert_all/6
iex(2)>
Run Code Online (Sandbox Code Playgroud)
从文档来看,它似乎inserted_at是自动生成的.我应该手动做这部分吗?
schema "categories" do
field :name, :string
field :url, :string
timestamps …Run Code Online (Sandbox Code Playgroud) 我有一个驱动程序频道,它将其位置广播到供应商频道.
defmodule MyApp.DriverChannel do
#...
def handle_in("transmit", payload, socket) do
MyApp.Endpoint.broadcast! "vendors:lobby", "track", payload
{:noreply, socket}
end
end
defmodule MyApp.DriverChannelTest do
#....
test "location broadcasts to vendors:lobby", %{socket: socket} do
push socket, "transmit", %{"hello" => "all"}
assert_broadcast "track", %{"hello" => "all"}
# Want something like this
# assert_broadcast "vendors:lobby", "track", %{"hello" => "all"}
end
end
Run Code Online (Sandbox Code Playgroud)
这个断言会失败,因为它只检查广播DriverChannel,如何断言广播VendorChannel,我查看了源代码,似乎没有选项传递channel_name给assert_broadcast宏.
[另一个注意事项]我也有控制器播放,如果我知道答案,我也可以断言那些广播!:)
{:ok, tas} = Task.Supervisor.start_link(restart: :transient, max_restarts: 4)
a = 1
Task.Supervisor.async_nolink(tas, fn -> IO.puts "#{a}..." end)
Task.Supervisor.async_nolink(tas, fn ->
IO.puts "Not Restarting :( "
1 = 2
end)
a = a + 1
Task.Supervisor.async_nolink(tas, fn -> IO.puts "#{a}.." end)
a = a + 1
Task.Supervisor.async_nolink(tas, fn -> IO.puts "#{a}.." end)
Run Code Online (Sandbox Code Playgroud)
该选项restart: :transient似乎没有任何影响.
我很少有任务 Task.async(fn(x) -> fetch_info(x) end使http请求获得多个资源,并且有超时错误.重新尝试那些失败的任务,而不是使用try,这将是很好的rescue.
我认为async_nolink是最接近我没有崩溃的过程.如果没有办法使用Task,我们是否有一个更简单的方法使用Supervisor启动多个进程,一旦他们的工作完成就存在,如果失败就重新启动它们?
我可以在ecto 2.0中插入多个记录:
iex(1)> categories = [%{name: "stackoverflow", url: "stackoverflow.com"}]
iex(2)> App.Repo.insert_all App.Category, categories
Run Code Online (Sandbox Code Playgroud)
是否可以一次更新多个记录?
iex(1) > category = App.Repo.all(App.Category) |> hd
iex(2) > changeset = App.Category.changeset(category, %{name: "test"})
iex(3)> App.Repo.insert_all App.Category, [changeset]
Run Code Online (Sandbox Code Playgroud)
我有一个场景,我会在抓取外部页面后每天插入或更新类别.好像MultiEcto 2.0中有功能.关于如何解决这个问题的任何指示?