2012-06-17 37 views
0

我試圖在我的rails應用程序中使用回形針設置Amazon S3存儲。Rails:AWS S3 + Paperclip:在AssetsController中獲取NoMethodError#create

我有一個名爲「資產」的模式,屬於「用戶」

這裏是第幾行中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」中的這一行有關,

我擡頭看了一下網絡, Rails_ROOT如何被棄用,所以我使用了Rails.root。仍然收到此錯誤。

此外,我還將AWS密鑰和密碼保存在amazon_s3.yml配置文件中。

這不是最好的做法,所以如果任何人有任何其他想法,我很樂意聽到他們。 heroku在他們的網站上稱變量爲環境變量,但是,我不知道我將如何在heroku上設置它,以及在我的本地開發計算機上如何處理Im?這將如何工作?

我只是有點困惑,所以看看是否有一個完整的例子或教程在那裏。所有我能找到被拋棄了設置.....

感謝

+0

什麼回溯/地方,你調用創建看起來像? –

回答

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. 可以肯定,你在Heroku上添加ENV變量:https://devcenter.heroku.com/articles/s3
  3. 可以的PAPERCLIP_STORAGE_OPTIONS值更改爲{ }。然後這些文件將存儲在本地(例如,用於測試)。

這個問題已經幫我解決問題:How can I set paperclip's storage mechanism based on the current Rails environment?

題外話,但它可能是有用的:如果要讀取的文件 - @asset.uploaded_file.s3_object.read

+0

嗨,感謝您的好評。我有一個問題:我在之前的「environments/development.rb」中有這樣一行:「Paperclip.options [:command_path] =」/ usr/local/bin /「」我應該添加一條建議的行:「PAPERCLIP_STORAGE_OPTIONS = {......}後,該行或更換感謝 – banditKing

+0

這不起作用即時得到這個錯誤「 路由錯誤 未初始化的常量資產:: PAPERCLIP_STORAGE_OPTIONS」 – banditKing

+0

添加之前或之後:沒關係。我只是重新檢查:對我來說也是一樣的。你有沒有試過重啓服務器?確保你已經在配置文件中寫入了相同的常量名稱,或者你啓動了哪個環境,或者你在哪裏放置配置......標準調試過程。但我不知道爲什麼你得到'路由錯誤'。這很奇怪,這裏可能是一個錯誤。 –

相關問題