Frage

Wie kann man den Zugriff Befehlszeile-Flag (Argumente) als Umgebungsvariablen in Erlang. (Wie Flaggen, nicht ARGV) Zum Beispiel:

RabbitMQ cli sieht etwa so aus:

erl \
...
-sasl errlog_type error \
-sasl sasl_error_logger '{file,"'${RABBITMQ_SASL_LOGS}'"}' \
... # more stuff here

Wenn man sasl.erl Looks sehen Sie die Zeile:

get_sasl_error_logger() ->
   case application:get_env(sasl, sasl_error_logger) of
% ... etc

Nach einer unbekannten Magie des sasl_error_logger Variable wird ein erlang Tupel! Ich habe versucht, dies in meinem eigenen erlang application replizieren, aber ich scheine nur in der Lage sein, diese Werte über init:get_argument zugreifen zu können, die den Wert als String zurück.

Wie kann man den Ball in Werten über die Kommandozeile und in der Lage sein, sie als erlang Begriffe leicht zugreifen?

UPDATE Auch für alle, die verwenden Umgebungsvariablen in der 'normalen' Art und Weise Gebrauch os:getenv("THE_VAR")

War es hilfreich?

Lösung

Achten Sie darauf, eine Anwendungskonfigurationsdatei einrichten

{application, fred,
 [{description, "Your application"},
  {vsn, "1.0"},
  {modules, []},
  {registered,[]},
  {applications, [kernel,stdlib]},
  {env, [
    {param, 'fred'}
        ]
...

und dann können Sie Ihre Befehlszeile nach oben wie folgt festgelegt:

-fred param 'billy'

Ich glaube, Sie müssen die Parameter in der Anwendungskonfiguration haben, dies zu tun - ich habe es nie eine andere Art und Weise getan ...

Einige weitere Informationen (einfacher, als es in einem Kommentar setzen)

Vor diesem Hintergrund

{emxconfig, {ets, [{keypos, 2}]}},

Ich kann dies sicherlich tun:

   {ok, {StorageType, Config}} = application:get_env(emxconfig),

und (und dies wichtig sein kann) meine Anwendung zu diesem Zeitpunkt gestartet (tatsächlich braucht nur und nicht wirklich aus der Betrachtung des application_controller Code gestartet geladen werden).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top