Как я могу заставить Webmachine и eredis работать вместе?

Я размышлял над вопросом об использовании Redis в моем приложении Webmachine в течение недели. И я еще не просветил.

Я собираюсь использовать Eredis, и вот пример использования:

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

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

Насколько я понимаю eredis:start_link() нужно позвонить куда-то только один раз. Но тогда как я могу получить Con переменная в моих ресурсах?

1 ответ

Решение

Есть несколько решений:

  • зарегистрировать соединение redis локально или глобально
  • используйте регистр процесса, такой как gproc
  • сохранить pid соединения в контексте ресурса webmachine
  • используйте пул соединений, такой как пул или пулбой
  • если вы не хотите ставить запросы в очередь в пул, может подходить

Изменить: неправильно понял вопрос, первый ответ ниже:

Webmachine и eredis - это приложения Erlang, которые следуют принципам OTP. Если ваше приложение соответствует OTP, вы можете добавить eredis в applications в вашем .app файл, как показано ниже:

{application, awesome_app, [
    {description, "My awesome app."},
    {vsn, "0.0.1"},
    {modules, []},
    {registered, []},
    {applications, [kernel, stdlib, 
                    eredis, 
                    webmachine]}
]}.

Приложения, соответствующие требованиям OTP, используют релизы. После того, как вы создадите релиз и запустите свое приложение, приложения в applications будет запущен до вашего приложения.

Rebar ваш друг для создания и создания релизов ( более подробную информацию здесь). Альтернативой арматуре является синан, который описан в этой статье.

Другие вопросы по тегам