私はPhoenixアプリケーションにファイルアップロードを追加しました。また、コンソールでアプリを起動すると、アップロードされた画像を開発環境や本番環境でローカルに表示できます。アップロードされた画像をプロダクションに表示できません
プロダクションサーバーに画像をアップロードすると、ファイルがアップロードされて正しいディレクトリにコピーされますが、ブラウザからファイルにアクセスすることができません。
plug Plug.Static,
at: "/", from: :bookingmot, gzip: false,
only: ~w(css fonts images js html favicon.ico robots.txt)
plug Plug.Static, at: "/uploads", from: Upload.base_path, gzip: false
アップロードモジュールをアップロードするために必要なすべてのタスクを処理し、次のようにBASE_PATHが定義されています:
def base_path do
System.get_env("UPLOAD_PATH")
end
のEnvするvar UPLOAD_PATHを次のように
私のエンドポイントのstaticプラグがありますサーバー上で次のように定義されています。
/home/[username]/www/phoenix/[app-name]/uploads
# to clarify, the contents of [app-name] are the results of
# tar xfz app-release.tar when deploying
アップロードされたすべてのファイルが上記のディレクトリはうまくいきますが、ブラウザで次のように入力すると、ページが返されません。
http://[app-url]/uploads/[name-of-file-in-uploads-folder]
開発VMとプロダクションサーバーは両方ともCentos 7であり、プロダクションアプリはNginxの背後にあります。
私はそれがすべてだと思っていますが、助けてくれればさらに詳しい情報を提供することができます。
缶'Upload.base_path'が実際にあなたがそれを呼び出すときに期待するパスを返すことを確認しますか? Upload.base_path、gzip:false'のプラグインスタティック、at: "/ uploads"の前にIO.inspect(Upload.base_path)を追加し、プロダクションサーバの出力を確認してください。その行は、実行中ではなく、アプリが_compiled_のときに実行されることに注意してください。 – Dogbert
こんにちは、はい、それはすでに検査しています。 Upload.base_pathは、アップロード後にtmpフォルダからファイルをコピーする際のパス(読み書きパスが同じであることを確認するため)にも使用され、ファイルは正しい場所にコピーされます。また、画像が表示されるはずのビューにパスを印刷し、正しいディレクトリを指しています。 –
ドッグベルトへの謝罪、イタリック体でさえ、私は_compiled_という言葉の使用の重要性を忘れていました。あなたのコメントは、私が正しくそれを読んでいれば正しい方向に私を導くだろう。 –