考虑这样简单的GenServer模块:
defmodule Crap do
use GenServer
... #All the needed crap
def handle_info(:kill_me_pls, state) do
GenServer.stop(self)
{:noreply, state}
end
def terminate(_, state) do
IO.inspect "Look! I'm dead."
end
end
Run Code Online (Sandbox Code Playgroud)
并考虑将这些表达式放入repl中:
{:ok, pid} = Crap.start_link
send_message_to_that_pid
Run Code Online (Sandbox Code Playgroud)
这是我的conceirns开始的地方,因为Process.alive? pid返回true,但是进程没有响应而且terminate没有被调用,尽管如果我GenServer.stop(pid)在'clean'进程中调用repl(没有收到kill消息)就可以正常杀死它.如果停止调用收到的进程:kill_me_pls消息挂起了repl.
我正在尝试编写一些插件以减少项目中不需要的代码量,我很乐意将一些会话数据放入控制器操作的_params中.但我不知道该怎么做.我遇到了functon assign/3但据我所知它分配了要在模板中使用的数据.
def logged(conn, _opts) do
case get_session(conn, :login) do
nil -> conn
|> Phoenix.Controller.put_flash(:error, "Musisz by? zalogowany")
|> Phoenix.Controller.redirect( to: "/")
|> Plug.Conn.halt
login -> #here
end
end
Run Code Online (Sandbox Code Playgroud)
我希望能够做到:
def someaction(conn, %{"login" => login}) do
#do something with login
end
Run Code Online (Sandbox Code Playgroud) 我试图围绕ExIrc做一个小包装,但我遇到了一些问题.__using__宏将ast附加到模块的开头,我想在默认情况下将函数定义附加到它的最后handle_info.我可以在使用该包装器的每个模块中手动完成它,但我更确定在某些时候我会忘记它.
我当前的包装器实现:
defmodule Cgas.IrcServer do
defmacro __using__(opts) do
quote do
use GenServer
alias ExIrc.Client
require Logger
defmodule State do
defstruct host: "irc.chat.twitch.tv",
port: 6667,
pass: unquote(Keyword.get(opts, :password, "password")),
nick: unquote(Keyword.get(opts, :nick, "uname")),
client: nil,
handlers: [],
channel: "#cohhcarnage"
end
def start_link(client, state \\ %State{}) do
GenServer.start_link(__MODULE__, [%{state | client: client}])
end
def init([state]) do
ExIrc.Client.add_handler state.client, self
ExIrc.Client.connect! state.client, state.host, state.port
{:ok, state}
end
def handle_info({:connected, server, port}, state) do
Logger.debug(state.nick <> " " …Run Code Online (Sandbox Code Playgroud) Sup,首先,我想让你知道我对Phoenix Framework和Elixir很新鲜.我正在通过教程工作,但我遇到了奇怪的问题.我配置了连接,一切正常.但是迁移文件似乎没有被执行.我写了以下文件:
defmodule Hangman.Repo.Migrations.CreateWords do
use Ecto.Migration
def change do
create table(:words) do
add :content, :string
timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
这只是一个包含一个字段的简单表.但是Table没有在数据库中创建,但Ecto认为一切正常:
18:22:28.669 [info] Already up
Run Code Online (Sandbox Code Playgroud) 我有以下Dockerfile:
FROM elixir:1.4.5
COPY . /
RUN mix compile
CMD echo "Application started" && elixir --name $MY_POD_NAMESPACE@$MY_POD_IP --no-halt --cookie $ERLANG_COOKIE -S mix run
Run Code Online (Sandbox Code Playgroud)
它启动并运行良好,但是当我尝试其中任何一个attatch或exec XXX bash根本没有响应时.