2017-04-14 13 views
0

我已經使用了Phoenix應用程序(我用--api標誌創建了它),它有一些額外的數據來處理我在priv/data/filters.csv中存儲的請求。在生產模式下閱讀Phoenix中的文件

因此,它可以在dev模式下正常工作,我可以像這樣讀取此文件:File.stream!("priv/data/filters.csv"),但是一旦使用mix edeliver update發送應用程序,則無法再訪問此文件。

我可以在構建目錄中看到這個文件夾,但在應用程序交付後沒有這樣的文件夾priv。我不知道爲什麼它沒有被複制到提供文件夾。

我在做什麼錯了?交付流程後是否需要複製這些文件? 我可以在哪裏存儲我必須在prod模式下使用的文件?

+0

什麼是'相對/ config.exs'的內容? – mudasobwa

+2

嘗試'File.stream!(Path.join(:code.priv_dir(:my_app),「data/filters.csv」))'。 – Dogbert

+0

測試此方法的一個快速方法是將remote_console打開到生產實例。然後你可以在iex中鍵入'pwd'來查看你的相對路徑的起始位置。然後嘗試調用':code.priv_dir(:my_app)'和絕對路徑。 –

回答

3

您應該使用:code.priv_dir/1在運行時獲取應用程序的priv目錄的絕對路徑。這將與例如由Erlang創建的Erlang版本一起工作。酒廠:

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

對我來說,做MIX_ENV=prod mix release後,該文件priv/foo被複制到_build/prod/lib/my_app/priv/foo

+0

上帝保佑你,它的工作!現在我知道它是如何工作的。 – BitOfUniverse

0

您應該檢查您的配置lib/YOUR_APP/endpoint.ex。 默認情況下,Plug.Static白色列出了提供的文件。 嘗試在only: ~w(...)列表中添加文件。

+0

是的,但我沒有看到通常的靜態文件。這是因爲我誤解了文件結構,所以我不得不在'deilver_path/lib/app_version /'文件夾中'priv'文件夾,而不是'deliver_path'本身。 – BitOfUniverse

0

我也有類似的問題,並設法解決它使用Application.app_dir(my_app, "priv")