2011-11-28 96 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