2017-04-14 9 views
0

Ich habe Phoenix App (ich schuf es mit - API-Flag), die einige zusätzliche Daten benötigt, um Anforderungen zu verarbeiten, die ich in priv/data/filters.csv speichern.Lesen Sie Dateien in Phoenix im Produktionsmodus

So funktioniert es gut in dev Modus kann ich diese Datei lesen wie: File.stream!("priv/data/filters.csv"), aber sobald App mit mix edeliver update geliefert wird, ist diese Datei nicht mehr zugänglich.

Ich kann diesen Ordner im Build-Verzeichnis sehen, aber nachdem App geliefert wird gibt es keinen solchen Ordner priv. Ich bin nicht sicher, warum es nicht kopiert wird, um Ordner zu liefern.

Was mache ich falsch? Muss ich diese Dateien nach dem Auslieferungsprozess kopieren? Wo kann ich meine Dateien speichern, die ich im Prod-Modus verwenden muss?

+0

mit zu lösen Was ist der Inhalt von 'rel/config.exs'? – mudasobwa

+2

Versuchen Sie 'File.stream! (Pfad.join (: code.priv_dir (: my_app)," data/filters.csv "))' '. – Dogbert

+0

Eine schnelle Möglichkeit, dies zu testen, besteht darin, eine remote_console für Ihre Produktionsinstanz zu öffnen. Sie können dann "pwd" in iex eingeben, um zu sehen, wo der relative Pfad beginnt. Dann versuchen Sie den Aufruf von ': code.priv_dir (: my_app)' und sehr den absoluten Pfad. –

Antwort

3

Sie sollten :code.priv_dir/1 verwenden, um den absoluten Pfad zum Verzeichnis priv Ihrer Anwendung zur Laufzeit zu erhalten. Dies funktioniert mit Erlang-Veröffentlichungen, die z. Distillery:

File.stream!(Path.join(:code.priv_dir(:my_app), "data/filters.csv")) 

Für mich nach MIX_ENV=prod mix release tun, wird die Datei priv/foo auf _build/prod/lib/my_app/priv/foo kopiert.

+0

Gott segne dich, es funktioniert! Und jetzt weiß ich, wie es funktioniert. – BitOfUniverse

0

Sie sollten Ihre Konfiguration in der lib/YOUR_APP/endpoint.ex überprüfen. Standardmäßig zeigt Plug.Static white die Dateien an, die geliefert werden. Versuchen Sie, Ihre Dateien in der Liste only: ~w(...) hinzuzufügen.

+0

Ja, aber ich habe auch keine üblichen statischen Dateien gesehen. Weil ich die Dateistruktur falsch verstanden habe, und ich musste für 'priv'-Ordner im' deilver_path/lib/app_version/'- Ordner, nicht im' deliver_path' selbst. – BitOfUniverse

0

hatte ich ein ähnliches Problem und schaffte es Application.app_dir(my_app, "priv")

Verwandte Themen