在 Erlang 库中为 RabbiqMQ 包含 amqp_client.hrl
Including amqp_client.hrl for RabbiqMQ in Erlang Library
我正在尝试弄清楚如何将 amqp_client.hrl 包含在我正在编写的库中。
我可以在基于以下示例的脚本中使用它:https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/erlang/send.erl
当我尝试在非脚本设置中使用它时:
-module(rabbitMQHandler).
-compile(export_all).
-include("amqp_client/include/amqp_client.hrl").
test() ->
{ok, Connection} =
amqp_connection:start(#amqp_params_network{host = "localhost"}),
{ok, Channel} = amqp_connection:open_channel(Connection),
ok = amqp_channel:close(Channel),
ok = amqp_connection:close(Connection),
ok.
我可以编译 rabbitMQHandler.erl 但是当我执行 rabbitMQHandler:test().
我得到以下错误 ** exception error: undefined function amqp_connection:start/1
将 amqp_client.hrl
包含在库中的合适方法是什么?
我尝试了 -include_lib("amqp_client/include/amqp_client.hrl").
但没有任何区别。
我试过包括 %%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin
但这也没用。
编辑:
对于那些在 emacs 中使用 Erlang repl 的人,将以下内容添加到您的 .emacs
文件中,以便将标志传递给您的 repl:
(defun erl-shell (flags)
"Start an erlang shell with flags"
(interactive (list (read-string "Flags: ")))
(set 'inferior-erlang-machine-options (split-string flags))
(erlang-shell))
使用 M-x erl-shell
你可以将标志传递给 erl。
该片段摘自 http://erlang.org/pipermail/erlang-questions/2007-January/024966.html。
undefined function amqp_connection:start/1
消息通常表示 amqp_connection
模块不在搜索路径中。
您需要使用您在脚本中使用的相同 -pz
标志来启动 Erlang。例如:
$ erl -pz ./amqp_client ./rabbit_common ./amqp_client/ebin
您可以double-check它通过查询模块信息来工作:
1> amqp_connection:module_info().
[{module,amqp_connection},
{exports,[{start,1},
{open_channel,1},
{open_channel,2},
...
然后您可以像往常一样运行您的代码。
关于 -include
与 -include_lib
,后者适合您的情况。这是从外部应用程序(OTP 或 third-party)包含 headers 的首选方式。
我正在尝试弄清楚如何将 amqp_client.hrl 包含在我正在编写的库中。
我可以在基于以下示例的脚本中使用它:https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/erlang/send.erl
当我尝试在非脚本设置中使用它时:
-module(rabbitMQHandler).
-compile(export_all).
-include("amqp_client/include/amqp_client.hrl").
test() ->
{ok, Connection} =
amqp_connection:start(#amqp_params_network{host = "localhost"}),
{ok, Channel} = amqp_connection:open_channel(Connection),
ok = amqp_channel:close(Channel),
ok = amqp_connection:close(Connection),
ok.
我可以编译 rabbitMQHandler.erl 但是当我执行 rabbitMQHandler:test().
我得到以下错误 ** exception error: undefined function amqp_connection:start/1
将 amqp_client.hrl
包含在库中的合适方法是什么?
我尝试了 -include_lib("amqp_client/include/amqp_client.hrl").
但没有任何区别。
我试过包括 %%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin
但这也没用。
编辑:
对于那些在 emacs 中使用 Erlang repl 的人,将以下内容添加到您的 .emacs
文件中,以便将标志传递给您的 repl:
(defun erl-shell (flags)
"Start an erlang shell with flags"
(interactive (list (read-string "Flags: ")))
(set 'inferior-erlang-machine-options (split-string flags))
(erlang-shell))
使用 M-x erl-shell
你可以将标志传递给 erl。
该片段摘自 http://erlang.org/pipermail/erlang-questions/2007-January/024966.html。
undefined function amqp_connection:start/1
消息通常表示 amqp_connection
模块不在搜索路径中。
您需要使用您在脚本中使用的相同 -pz
标志来启动 Erlang。例如:
$ erl -pz ./amqp_client ./rabbit_common ./amqp_client/ebin
您可以double-check它通过查询模块信息来工作:
1> amqp_connection:module_info().
[{module,amqp_connection},
{exports,[{start,1},
{open_channel,1},
{open_channel,2},
...
然后您可以像往常一样运行您的代码。
关于 -include
与 -include_lib
,后者适合您的情况。这是从外部应用程序(OTP 或 third-party)包含 headers 的首选方式。