Erlang: Wie CLI-Flags für den Zugriff (Argumente) als Anwendung Umgebungsvariablen?
-
06-07-2019 - |
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")
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).