2011-11-28 183 views
1

無法找到一種方式讓S3能夠使用spree。似乎存在幾個寶石,但似乎沒有爲我工作。亞馬遜S3和Spree安裝

運行軌道3.1.1與大禮包0.70.3。

+0

到目前爲止您嘗試過什麼?你遇到什麼錯誤?說它不起作用並不真正的幫助。 – leonardoborges

+0

我已經嘗試了以下gem https://github.com/dylanmei/spree-s3.git,或者也https://github.com/thoughtful/spree-s3.git在兩個我得到實體不存在,當我運行rake spree_s3:install – elkalto23

回答

9

我正在運行rails 3.0.10和spree 0.60,並且能夠通過執行以下操作獲得使用s3存儲來寫入應用程序的公用文件夾的熱潮。該過程應該是相似的。

添加AWS-S3寶石安裝在你的Gemfile

gem 'aws-s3' 

捆綁,做我創建config目錄下名爲s3.yml YAML文件,它應該是這個樣子了。

development: &DEFAULTS 
    bucket: "YOUR_BUCKET" 
    access_key_id: "YOUR_ACCESS_KEY" 
    secret_access_key: "YOUR_ACCESS_SECRET" 

test: 
    <<: *DEFAULTS 
    bucket: "YOUR_BUCKET" 

production: 
    <<: *DEFAULTS 
    bucket: "YOUR_BUCKET" 

您可以指定每個環境個別憑據,如果你喜歡,但因爲我的都使用相同的S3 accont我選擇設置默認值。

之後,您將不得不重寫圖像模型或爲您的裝飾器製作一個裝飾器,它可以讓回形針使用S3並讓它解析爲憑證創建的yaml文件。

你要要覆蓋會是這樣

has_attached_file :attachment, 
       :styles => {:mini => '48x48>', :small => '200x100>', :product => '240x240>', :large => '600x600>'}, 
       :default_style => :small, 
       :storage => :s3, 
       :s3_credentials => "#{RAILS_ROOT}/config/s3.yml", 
       :url => "/assets/products/:id/:style/:basename.:extension", 
       :path => ":rails_root/public/assets/products/:id/:style/:basename.:extension" 

根據需要,但什麼重要的是你指定你可以改變這些屬性的區域:存儲設備:s3_credentials。

+1

如果碰巧將Spree碰到更新的版本,例如1.0.x,我建議您將gem從'aws-s3'更改爲'aws-sdk',因爲前者不推薦使用。另一個快速方法是使用spree-heroku擴展https://github.com/joneslee85/spree-heroku。 如果您使用Spree 1.1.x,則無需安裝任何擴展模塊或覆蓋模型,您可以在管理設置中對其進行配置。希望這個幫助。 –

3

在當前版本的Spree中,您可以在管理工具中設置這些值。但是,如果您希望將其保留在代碼中,但不覆蓋圖像模型,則可以在config/initializers/spree.rb中設置這些值。請確保不要通過管理員門戶進行編輯。

S3_CONFIG = YAML.load_file("#{Rails.root}/config/s3.yml")[Rails.env] 

Spree.config do |config| 
    config.attachment_styles = ActiveSupport::JSON.encode({ 
     "mini" => "100x100>", 
     "small" => "200x200>", 
     "medium" => "400x600>", 
     "product" => "400x600>", 
     "large" => "600x600>", 
     "xl" => "800x800>", 
     "xxl" => "1200x1200>", 

    }) 

    #AWS S3 
    config.use_s3 = true 
    config.s3_bucket = S3_CONFIG['bucket'] 
    config.s3_access_key = S3_CONFIG['access_key_id'] 
    config.s3_secret = S3_CONFIG['secret_access_key'] 
    config.attachment_url = 'products/:id/:style/:basename.:extension' 
    config.attachment_path = 'products/:id/:style/:basename.:extension' 
end