Как использовать приложение: get_env () в Erlang / OTP? - PullRequest
2 голосов
/ 06 ноября 2010

Я создал экземпляр mochiweb

src/
   |-- Makefile
   |-- room.erl
   |-- myserver.app
   |-- myserver.erl
   |-- myserver_app.erl
   |-- myserver_deps.erl
   |-- myserver_sup.erl
   |-- myserver_web.erl
   `-- uuid.erl

в myserver_web.erl Я могу получить доступ к конфигурации приложения

{ok, "0.0.1"} = application:get_key(vsn),

Однако в room.erl я не могу получить доступ к конфигурации приложения (в частности, список env).

undefined = application:get_key(vsn),

Супервайзер не запускает комнату, и я тоже этого не хочу.

Я новичок в OTP и понимаю, что, возможно, делаю что-то глупое, но я очень признателен за чью-либо помощь.

Ура!

Ответы [ 3 ]

3 голосов
/ 06 ноября 2010

С документация Erlang о приложении: функция get_key / 1-2 :

Возвращает значение приложения ключ спецификации Ключ для Приложения. Если аргумент приложения опущено, по умолчанию применение процесса вызова.

Какое применение my_server_web.erl? Что за применение room.erl?

Если указанное приложение не загружен, или ключ спецификации делает не существует, или если процесс выполняет звонок не принадлежит ни одному приложение, функция возвращает не определено.

Указан ли ключ? Приложение загружено?

Что касается клавиши "env", вы можете использовать приложение: вместо него функцию get_env / 1 .

1 голос
/ 06 ноября 2010

Я понял это ... Ответ довольно глупый, и я чувствую себя глупо, но надеюсь, что кто-то другой может извлечь из меня пользу.

Я действительно все делал правильно (как и все другие ответы), но я использовал mochiweb auto reloader и фактически не останавливал сервер. Как только я это сделал, все было хорошо.

DOH! Извините!

0 голосов
/ 06 ноября 2010

Используйте get_key(myserver, vsn) вместо. Обратите внимание, что приложение должно быть загружено в первую очередь.

...