2013-10-13 10 views
6

私のオブジェクトがAmazonのS3サービスに正常にアップロードされたときにpaperclipから返されるエンドポイントを設定しようとしています。アップロードとすべてが正常に動作していますが、返されるURLはアップロードを表示するために間違っています。Rails 4、Paperclip、Amazon S3 Config Amazon Path

現在、返されているURLはhttp://s3.amazonaws.com/path/to/my/itemsです(下の図を参照)。

代わりのs3.amazonaws.com、私は

enter image description here

(例えば s3-us-west-1.amazonaws.com/path/to/my/items)バケットの位置に特異的であるようにルートを希望します

どこから別のURLパス(s3.amazonaws.comから何か他のものへ)を試してみるべきですか?上記のパスのURLを私の設定ファイルに追加しようとしました:

#Paperclip Amazon S3 
    config.paperclip_defaults = { 
     :storage => :s3, 
     :url => "https://s3-us-west-1.amazonaws.com/", 
     :s3_credentials => { 
      :bucket => ENV['S3_BUCKET_NAME'], 
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 

     } 

    } 

これは効果がないようです。このオプションをどこに設定するべきかアドバイスしてください!

ありがとうございます!

+0

** '**置き換えます

また、これは、この問題に行き着くの読者に興味深いかもしれません"** with **':s3_host_name => 's3-us-west-1.amazonaws.com' 'とすれば、あなたは良いでしょう。 –

答えて

11

S3を使用する場合は、実際のモデル(設定ファイルだけでなく)にS3認証情報を含める必要があることがわかりました。ここでは何をすべきかです:

モデル

#Image Upload 
Paperclip.options[:command_path] = 'C:\RailsInstaller\ImageMagick' 
has_attached_file :image, 
     :styles => { :medium => "x300", :thumb => "x100" }, 
     :default_url => "****", 
     :storage => :s3, 
     :bucket => '****', 
     :s3_credentials => S3_CREDENTIALS, 
      :url => "/:image/:id/:style/:basename.:extension", 
      :path => ":image/:id/:style/:basename.:extension" 

のconfig/application.rb

# Paperclip (for Amazon) (we use EU servers) 
    config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_host_name => 's3-eu-west-1.amazonaws.com' 
    } 

のconfig/s3.yml

#Amazon AWS Config 
development: 
    access_key_id: ********** 
    secret_access_key: ************** 
    bucket: **** 

production: 
    access_key_id: *********** 
    secret_access_key: *********** 
    bucket: **** 

これは役に立ちますか?

+2

**モデル**に ':s3_host_name'キーを置くこともできます。 –

+0

私の資格情報を各モデルに書き込むのではなく、config/aws.ymlに書かなければなりませんでした。 –

0

また、私はSpree 2.2への移行時に同じ問題を抱えていましたが、それを正しい方法で解決する方法がまだわかりません。 Paperclipは設定から​​パスを更新しているはずですが、そうではありません。よりよい解決策を欠く

は、私はこのようなシュプレー:: Imageクラスをオーバーライドしてきました:

1 Spree::Image.class_eval do 
2 has_attached_file :attachment, 
3  styles: { mini: '48x48>', small: '100x100>', product: '240x240>', large: '600x600>' }, 
4  default_style: :product, 
5  url: '/spree/products/:id/:style/:basename.:extension', 
6  path: 'products/:id/:style/:basename.:extension', 
7  convert_options: { all: '-strip -auto-orient -colorspace sRGB' }· 
8 end 
0

は、いくつかの実験の後、私は:s3_host_nameを設定することが世界的に充分であることを見出しました。私は同じ問題を抱えていました.は、添付ファイルを保存するためにPaperclip(4.3.1以降、aws-sdk 2)で使用されていましたが、URLを生成するときには使用されませんでした。 https://s3-us-west-1.amazonaws.com/ URL =>」:https://github.com/thoughtbot/paperclip/wiki/Restricting-Access-to-Objects-Stored-on-Amazon-S3