2

我是比較新的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的話,所有的事情都能在當地正常工作。有其他建議嗎?想法?

回答

0

您不一定非得使用Amazon服務來存儲您的圖像,但是如果您在Heroku上託管,則無法在本地存儲。這是因爲heroku使用臨時文件系統,因此您必須期望您在本地存儲的任何內容都可能隨時消失。當您需要擴展應用程序時,這使得事情變得更加容易,因爲如果您啓動新的dynos,則不依賴任何本地存儲(這也使得Heroku的生活更輕鬆,因爲它們不需要擔心所有的共享存儲的應用程序的dynos應該掛載)。

現在回到S3。首先,你有其他選擇,如果你用回形針使用'霧'寶石,你可以用相對容易的方式訪問number of storage providers

不過,S3是最常見的,通過定義AWS_REGION變量,您的問題應該很容易理清。在Heroku上,您可以通過運行以下操作來完成此操作:

heroku config:set AWS_REGION=us-west-2 

或者您正在使用的任何區域。

而且,上次我檢查回形針不符合AWS SDK 2兼容的,所以如果你有奇怪的問題,你可以通過在Gemfile中使用這種嘗試切換回SDK 1:

gem 'aws-sdk', '< 2.0' 
+0

謝謝你的翔實的答案和解決方案。我遵循你的建議並安裝了aws v1,並將所有Aws的引用都更改爲AWS並定義了該區域 - 這固定了我所得到的區域錯誤,並且現在用類似的錯誤代替了它。NameError in Devise :: RegistrationsController#create 未初始化的常量AWS :: S3 :: Resource –

+0

這個新錯誤也引用了設計註冊控制器,就像舊錯誤一樣,這並不奇怪,因爲當我嘗試註冊時會拋出錯誤有圖片上傳的新用戶。我還沒有創建註冊控制器。你會建議創建一個設計註冊控制器來解決問題嗎? –

+0

這很奇怪。造成錯誤的原因是AWS SDK v1沒有S3 :: Resource類...我查看了回形針源代碼中發生的事情,似乎他們已經刪除了AWS SDK版本的測試。如果你降級到回形針4.3.0,一切都應該工作(只有在SDK版本不是v1的情況下,它才使用S3 :: Resource,並且我在S3的一個項目中成功使用了它)。 – taglia