如何让Webmachine和eredis一起工作?

N.A*_*.A. 2 erlang mochiweb redis webmachine

我一直在思考我的Webmachine应用程序中的Redis使用问题一周.我还没有开悟.

我将使用Eredis,这是一个用法示例:

{ok, Con} = eredis:start_link().

{ok, <<"OK">>} = eredis:q(Con, ["SET", "foo", "bar"]).
{ok, <<"bar">>} = eredis:q(Con, ["GET", "foo"]).
Run Code Online (Sandbox Code Playgroud)

据我所知,eredis:start_link()应该只在某处召唤一次.但那我怎么能Con在我的资源中变量呢?

Til*_*man 6

有几种解决方案:

  • 在本地或全局注册redis连接
  • 使用像gproc这样的进程寄存器
  • 在webmachine资源上下文中保留连接的pid
  • 使用像poolerpoolboy这样的连接池
  • 如果您不想在池中排队请求,可以使用dispcount

编辑:误解的问题,第一个答案如下:

Webmachine和eredis都是遵循OTP原则的 Erlang 应用程序.如果您的应用程序符合OTP,则可以applications.app文件中添加eredis ,如下所示:

{application, awesome_app, [
    {description, "My awesome app."},
    {vsn, "0.0.1"},
    {modules, []},
    {registered, []},
    {applications, [kernel, stdlib, 
                    eredis, 
                    webmachine]}
]}.
Run Code Online (Sandbox Code Playgroud)

OTP符合应用程序使用版本.创建发布并启动应用程序后,applications将在应用程序之前启动应用程序.

Rebar是您构建和生成版本的朋友(此处有更多信息).螺纹钢的替代品是sinan,本文对此进行了描述.