在iex中,我无法获得内置Erlang函数的帮助,例如:
iex(1)> h :lists.reverse
:lists was not compiled with docs
Run Code Online (Sandbox Code Playgroud)
有没有解决的办法?
我的头衔不是很好,因为我发现很难用小片段来解释我想要的东西......所以我会深入尝试!
我正在使用Phoenix Web框架编写Elixir应用程序.
我想要做的是:
该过程不需要返回到Web路由(即其异步)
我知道如何通过使用消息队列(Beanstalk,RabbitMQ,sidekiq)来处理其他语言,并将"作业"交给工作人员,然后编写工作人员来处理队列中的作业.
但是......我知道在Elixir中它默认排队,因为所有内容都被推入"邮箱"(在YouTube视频中看到它:p)
但是我找不到任何合适的代码示例来说明如何让控制器(在phoenix中)产生一个异步进程,该进程将在消息队列中处理.
有没有人知道任何体面的资源,显示我正在寻找什么,或者是否有人有任何代码片段,将给我一个基本的描述如何做到这一点.
谢谢 :)
编辑:
正如评论中所提到的,我已经创建了一个基本教程,介绍如何在Elixir应用程序中启动和运行Poolboy.我希望它对人们有用(并且正确!):)
我刚刚在我的Windows 7机器上通过chocolatey安装了elixir.在C目录的根目录下,在管理员命令提示符下,我运行:
c:\> cinst elixir
Run Code Online (Sandbox Code Playgroud)
这成功安装了erlang和elixir - v.1.0.4.没有失败,所有成功的消息.然后我重新启动命令提示符并运行
c:\> iex.bat
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
'iex.bat'未被识别为内部或外部命令,可操作程序或批处理文件.
我经常运行一台mac,所以当谈到Windows时我很无知.也尝试iex在git bash中运行,但没有运气.我如何运行iex?
我正在尝试使用addict包在我的项目中进行身份验证,但每当我尝试执行操作(注册,登录...)时,我的POST都会收到CrossDomain错误.
我已经尝试添加cors_plug包来解决这些问题并添加
<input type="hidden" name="_csrf_token" value="<%= get_csrf_token %>">
Run Code Online (Sandbox Code Playgroud)
到我的index.html.eex模板页面,我仍然在我的浏览器控制台上得到这个:
POST http://localhost:4000/register 403 (Forbidden)
n.ajaxTransport.k.cors.a.crossDomain.send @ jquery-2.1.4.min.js:4
n.extend.ajax @ jquery-2.1.4.min.js:4
n.each.n.(anonymous function) @ jquery-2.1.4.min.js:4
(anonymous function) @ socket.js:62
n.event.dispatch @ jquery-2.1.4.min.js:3
n.event.add.r.handle @ jquery-2.1.4.min.js:3
XHR finished loading: POST "http://localhost:4000/register".
n.ajaxTransport.k.cors.a.crossDomain.send @ jquery-2.1.4.min.js:4
n.extend.ajax @ jquery-2.1.4.min.js:4n.each.n.(anonymous function) @ jquery-2.1.4.min.js:4
(anonymous function) @ socket.js:62n.event.dispatch @ jquery-2.1.4.min.js:3
n.event.add.r.handle @ jquery-2.1.4.min.js:3
Run Code Online (Sandbox Code Playgroud)
我的javascript代码与addict示例相同,只是我没有将它作为脚本放在我的模板中(当我尝试时甚至没有调用代码).我把它放在底部priv/static/js/app.js.js代码如下:
$('#btn-register').click(function() {
var email = $('#txt-register-email').val();
var username = $('#txt-register-username').val();
var password = $('#txt-register-password').val();
$.post('/register', …Run Code Online (Sandbox Code Playgroud) 我已经使用Laravel PHP Framework进行Web开发,现在我想了解elixir并将其用作REST API服务.
我的问题是:elixir phoenix和laravel elixir有什么区别?
我的前端是一个单独的Brunch.io AngularJS应用程序.由于我的前端在http:// localhost:3333上运行,而我的凤凰后端在http:// localhost:4000上运行,因此在尝试POST到http:// localhost:4000/api/users/register时出现此错误
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3333' is therefore not allowed access. The response had HTTP status code 404.
Run Code Online (Sandbox Code Playgroud)
所以我认为这是一个CORS问题.如何在凤凰中发送标题?
这是我的router.ex
scope "/api", MyApp do
pipe_through :api
# Users
post "/users/register", UserController, :register
end
Run Code Online (Sandbox Code Playgroud)
这是我的UserController
defmodule MyApp.UserController do
use MyApp.Web, :controller
def register(conn, params) do
IO.puts(inspect(params))
conn
|> put_status(201)
|> json %{ok: true, data: params}
end
end
Run Code Online (Sandbox Code Playgroud) 我有一个定义模块的宏.
defmodule Bar do
def bar do
IO.puts "I am #{inspect __MODULE__}"
end
end
defmodule MacroFun do
defmacro define_module(name) do
quote do
defmodule unquote(name) do
import Bar
def foo do
bar
IO.puts "I am #{inspect __MODULE__}"
end
end
end
end
end
defmodule Runner do
require MacroFun
def run do
MacroFun.define_module Foo
Foo.foo
end
end
Runner.run
Run Code Online (Sandbox Code Playgroud)
运行它的输出是:
I am Bar
I am Runner.Foo
Run Code Online (Sandbox Code Playgroud)
这是有道理的; MacroFun.define_module被调用,Runner.run因此模块被定义并因此嵌套在Runner模块下.
但是现在如果我MacroFun.define_module改为使用:bind_quoted选项:
defmacro define_module(name) do
quote bind_quoted: [name: …Run Code Online (Sandbox Code Playgroud) 对不起,我是Elixir的新手.在构建凤凰应用程序时,mix deps.get失败并出现错误.
% mix deps.get
Could not find Hex, which is needed to build dependency :phoenix
Shall I install Hex? [Yn] y
** (MatchError) no match of right hand side value: {:error, {:ssl, {'no such file or directory', 'ssl.app'}}}
(mix) lib/mix/utils.ex:409: Mix.Utils.read_httpc/1
(mix) lib/mix/utils.ex:354: Mix.Utils.read_path/2
(mix) lib/mix/local.ex:107: Mix.Local.read_path!/2
(mix) lib/mix/local.ex:86: Mix.Local.find_matching_versions_from_signed_csv!/2
(mix) lib/mix/tasks/local.hex.ex:23: Mix.Tasks.Local.Hex.run/1
(mix) lib/mix/dep/loader.ex:140: Mix.Dep.Loader.with_scm_and_app/4
(mix) lib/mix/dep/loader.ex:98: Mix.Dep.Loader.to_dep/3
(elixir) lib/enum.ex:1043: anonymous fn/3 in Enum.map/2
%
Run Code Online (Sandbox Code Playgroud)
erlang和elixir已通过kerl和asdf安装.我的安装日志在这里http://otiai10.hatenablog.com/entry/2016/02/03/154953
envirionment
发生了什么,我该怎么办?
你如何检查Phoenix/Elixir/Erlang应用程序的正常运行时间?如果执行:observer.start()并查看"系统"选项卡,则可以在"统计"区域中查看正常运行时间.但我希望能够以编程方式提取该信息并将其包含在报告中.我已经找到了从哪里获取大部分数据,但我没有看到它从哪里获取正常运行时间.
当我的测试在Heroku上运行时,我发现了一个奇怪的错误,周五没有发生,一切都很好.
-----> Running test command `mix test`...
08:29:52.761 [info] Already up
08:29:53.389 [info] seeding in prod environment
08:29:53.389 [info] runing default seeds
All departments inserted
** (RuntimeError) cannot configure sandbox with pool DBConnection.Poolboy.
To use the SQL Sandbox, configure your repository pool as:
pool: Ecto.Adapters.SQL.Sandbox
(ecto) lib/ecto/adapters/sql/sandbox.ex:429: Ecto.Adapters.SQL.Sandbox.mode/2
(elixir) lib/code.ex:376: Code.require_file/2
(elixir) lib/enum.ex:675: Enum."-each/2-lists^foreach/1-0-"/2
(elixir) lib/enum.ex:675: Enum.each/2
(mix) lib/mix/tasks/test.ex:229: Mix.Tasks.Test.run/1
-----> test command `mix test` failed with exit status 1
Run Code Online (Sandbox Code Playgroud)
几个月内没有对测试配置的更改......
# Configure your database
config :ev2, Ev2.Repo,
adapter: Ecto.Adapters.Postgres, …Run Code Online (Sandbox Code Playgroud) elixir ×10
erlang ×3
angularjs ×1
chocolatey ×1
cors ×1
elixir-mix ×1
heroku ×1
laravel ×1
macros ×1
testing ×1