0

Railsアプリでペーパークリップを使用してAmazonS3ストレージをセットアップしようとしています。

「User」に属する「Asset」というモデルがあります

Asset.rbの最初の数行は次のとおりです

attr_accessible :user_id, :uploaded_file

belongs_to :user
#set up "uploaded_file" filed as attached_file(using paperclip)
has_attached_file :uploaded_file,
                :path => "assets/:id/:basename.:extension",
                :storage => :s3,
                :s3_credentials => "#{Rails.root}/config/amazon_s3.yml",
                :bucket => "XXXXX"

validates_attachment_size :uploaded_file, :less_than => 1000.megabytes
validates_attachment_presence :uploaded_file

ビューをロードするとエラーが発生します:

NoMethodError in AssetsController#create
undefined method `symbolize_keys' for #<String:0x00000103939258>

これは何を意味するのでしょうか。これは、 "Asset.rb":s3_credentials => "#{Rails.root}/config/amazon_s3.yml"のこの行と関係があります。

Webで調べたところ、Rails_ROOTが非推奨になる方法についていくつかの議論があったため、代わりにRails.rootを使用しました。それでもこのエラーが発生します。

また、AWSキーとシークレットパスワードをamazon_s3.yml設定ファイルに保存しています。

これはベストプラクティスではないので、他に何かアイデアがあれば、ぜひ聞いてみてください。herokuは、Webサイトで変数を環境変数として配置すると言っていますが、herokuでどのように設定するのか、また、ローカル開発マシンでImを使用する場合はどうでしょうか。それはどのように機能しますか?

少し混乱しているので、どこかに完全な例やチュートリアルがあるかどうかを確認します。私が見つけたのは非推奨の設定だけでした.....

ありがとう

4

1 に答える 1

2

それが私にとってどのように機能するか(あなたの状況に適応):

#Asset.rb
has_attached_file :uploaded_file, {
  :path => "assets/:id/:basename.:extension"
}.merge(PAPERCLIP_STORAGE_OPTIONS)

#environments/development.rb and test.rb
PAPERCLIP_STORAGE_OPTIONS = {
  :storage => :s3,
  :bucket => "XXXX",
  :s3_credentials => YAML.load_file("#{Rails.root}/config/s3_credentials.yml")
}

#environments/production.rb
PAPERCLIP_STORAGE_OPTIONS = {
  :storage => :s3,
  :bucket => ENV['S3_BUCKET_NAME'],
  :s3_credentials => {
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
  }
}

#config/s3_credentials.yml
access_key_id: "XXXX"
secret_access_key: "XXXX"

ご注意ください

  1. に追加s3_credetials.yml.gitignoreます。
  2. 必ず、ENVherokuに変数を追加してください:https ://devcenter.heroku.com/articles/s3
  3. の値をPAPERCLIP_STORAGE_OPTIONSに変更できます{ }。その後、ファイルはローカルに保存されます(たとえば、テスト用)。

この質問は、問題の解決に役立ちました。現在のRails環境に基づいてペーパークリップのストレージメカニズムを設定するにはどうすればよいですか?

トピックから外れていますが、役に立つかもしれません:ファイルを読みたい場合-@asset.uploaded_file.s3_object.read

于 2012-06-17T13:12:03.843 に答える