我是比較新的rails。我的回形針寶石在本地開發過程中可以正常工作,用戶在註冊時無需擔心上傳頭像。我通過Heroku部署到生產環境,並且在註冊時創建上傳圖片的用戶時也沒有錯誤,但所有上傳的圖片在生產中都顯示爲縮略圖。我讀起來,顯然是用回形針製作的,我應該使用一種叫做Amazon S3的東西(如果有更好的方法,請糾正我),所以我正在努力做到這一點。上傳帶回形針寶石的圖片時缺少Aws區域錯誤亞馬遜S3
這是我得到的錯誤,當我嘗試創建一個用戶與上傳的圖片:
Aws::Errors::MissingRegionError in Devise::RegistrationsController#create
missing region; use :region option or export region name to ENV['AWS_REGION']
以下是我在我的生產和開發環境
config.paperclip_defaults = {
storage: :s3,
s3_host_name: 's3-ap-southeast-1.amazonaws.com',
s3_credentials: {
bucket: ENV['AWS_S3_BUCKET'],
s3_region: ENV['S3_REGION'],
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
}
}
這裏是我在我的paperclip.rb初始化器
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'
Paperclip::Attachment.default_options[:s3_host_name] = 's3-ap-southeast-1.amazonaws.com'
note(我在中東)
和這裏是我在我的用戶模型
#paperclip gem storing avatar images
has_attached_file :avatar,
:bucket => 'bucket_name',
:styles => {
:thumb => ['100x100#', :jpg, :quality => 70],
:preview => ['480x480#', :jpg, :quality => 70],
:large => ['600>', :jpg, :quality => 70],
:retina => ['1200>', :jpg, :quality => 30]
},
:convert_options => {
:thumb => '-set colorspace sRGB -strip',
:preview => '-set colorspace sRGB -strip',
:large => '-set colorspace sRGB -strip',
:retina => '-set colorspace sRGB -strip -sharpen 0x0.5'
}
我已經看過了關於S3回形針寶石和失蹤地區誤差問題,但從來沒有見過這樣的說法錯誤的是在設計控制器。我認爲這是因爲:頭像之間的關聯是由用戶控制的,並且我沒有單獨的用戶控制器。
我覺得應該有一個更簡單的方法來解決在回形針寶石生產中丟失圖像的問題,而不是使用這個亞馬遜S3的東西。尤其是如果沒有Amazon S3的話,所有的事情都能在當地正常工作。有其他建議嗎?想法?
謝謝你的翔實的答案和解決方案。我遵循你的建議並安裝了aws v1,並將所有Aws的引用都更改爲AWS並定義了該區域 - 這固定了我所得到的區域錯誤,並且現在用類似的錯誤代替了它。NameError in Devise :: RegistrationsController#create 未初始化的常量AWS :: S3 :: Resource –
這個新錯誤也引用了設計註冊控制器,就像舊錯誤一樣,這並不奇怪,因爲當我嘗試註冊時會拋出錯誤有圖片上傳的新用戶。我還沒有創建註冊控制器。你會建議創建一個設計註冊控制器來解決問題嗎? –
這很奇怪。造成錯誤的原因是AWS SDK v1沒有S3 :: Resource類...我查看了回形針源代碼中發生的事情,似乎他們已經刪除了AWS SDK版本的測試。如果你降級到回形針4.3.0,一切都應該工作(只有在SDK版本不是v1的情況下,它才使用S3 :: Resource,並且我在S3的一個項目中成功使用了它)。 – taglia