2017-01-26 8 views
1

私はCarrierwaveでS3のファイルにアクセスするのに苦労しています。S3上のCarrierwaveアップロードとアクセスファイル

私のアップローダファイルdoc_uploader.rbで、私は次の行を持ってアップロードされたファイルにアクセスするには

class Doc < ActiveRecord::Base 
belongs_to :user 
mount_uploader :doc, DocUploader 
end 

に従うように定義された「DOC」モデルをuplooadするために、次のコード

storage :file 
def store_dir 
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
end 

を持っていますコントローラ内のコード

@doc = current_user.docs.order("created_at").last #last file uploaded by user 
io = open("#{Rails.root}/public" + @doc.doc.url) 

すべてが完全にローカルで動作します。今、私は私が霧を使うアップローダーでS3に自分のファイルを移動し、私は私の設定ファイルcarrierwave.rbを調整し、アップロードが完全作品

storage :fog 

によって

storage :file 

を交換したいです。しかし、私は

@doc = current_user.docs.order("created_at").last 
io = open("#{@doc.doc.url}") 

を使用しようと、私は

No such file or directory @ rb_sysopen - /uploads/doc/doc/11/the_uploaded_file.pdf 

次のエラーを取得するファイルにアクセスするには誰も私S3上のファイルへのアクセス権の構文をしてください与えてもらえますか?ありがとう。

+0

私には1つの質問があります。ストレージを変更する前にドキュメントレコードが保存されていましたか?フォグ? – kurenn

+0

はいドキュメントレコードが保存されました。 – Bastien

答えて

0

コンソールを介して、資産にアクセスする場合、それはあなただけのパスを与え、あなたは@doc.doc.urlにプロトコル&ホストを追加する必要があるかもしれません、のようなもの:

io = open("http://example.com#{@doc.doc.url}") 

それとも、上の資産のURLを設定することができますあなたがする必要があるが、これは本当に必要ではありません環境:あなたは、この限りではありません任意のWebビューで、コンソールを使用している場合にのみ適用され

config.asset_host = 'http://example.com' 

、carrierwaveはそれを処理するようです

関連する問題