有料ダウンロードでwebappを作成しています。protecting uploadsのCarrierwaveのガイドに従っています。すべてが1つのことを保存することを期待して動作しています。経路を表示しないでCarrierwave URLを表示
ProductsController製品のファイルアップローダ
...
def store_dir
"#{Rails.root}/downloads/#{model.product_id}/#{model.id}"
end
...
ルート
get "/downloads/:product_id/:product_file_id/:filename", :controller => "products", action: "download", conditions: {method: :get}
:ここに私の現在の設定です
ダウンロードパスに問題があります。ファイルアップローダで#{Rails.root}
を指定したため、ファイルはdownloads
というパブリックフォルダの外部フォルダに保存されます。しかし、これには意図しない副作用があります。私のモデルからURLを取得すると、Rails Rootの相対パスではなく絶対パス全体が得られます。
したがって、ProductFile.first.file.url
は"/home/doomy/Documents/resamplr/downloads/3/1/aaaa.zip"
を返します。代わりに/downloads/3/1/aaa.zip
を返す必要があります。
この現象は、ProductFileUploader
で指定されているものに添付されているようです。
たとえば、store_dir
を"/downloads/#{model.product_id}/#{model.id}"
に変更すると、自分のPCのルートにアップロードしようとするとアクセスエラーが発生します。 "downloads/#{model.product_id}/#{model.id}"
は、単にダウンロードと呼ばれるpublic
ディレクトリの新しいフォルダにアップロードします。これは私がしたいことではありません。
進め方についてのアドバイスはありますか?ありがとう。
は編集:
私はRails.root
にCarrierwave設定ファイルにconfig.root
を設定すると、この動作を可能にすることを発見しました。私がこれを行うと、ProductFileUploader
でstore_dir
を"downloads/#{model.product_id}/#{model.id}
と指定することができます。
ただし、これは公開ファイルが「/ public/...」リンクで保存されていることを意味します。 Railsはパブリックフォルダ名を自動的に破棄し、URL内のサブディレクトリ名を使用します。