【问题标题】:Amazon S3 and Spree setupAmazon S3 和 Spree 设置
【发布时间】:2011-11-28 10:16:09
【问题描述】:

找不到让 S3 与 spree 一起工作的方法。似乎存在一些宝石,但似乎对我不起作用。

运行 rails 3.1.1 和 spree 0.70.3。

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3 heroku amazon-s3 spree


【解决方案1】:

我正在运行 rails 3.0.10 和 spree 0.60,并且能够通过执行以下操作来使用 s3 存储而不是写入应用程序的公用文件夹。过程应该是相似的。

将 aws-s3 gem 添加到您的 Gemfile

gem 'aws-s3'

安装包后,我在配置目录中创建了一个名为 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 帐户,因此我选择设置默认值。

之后,您将不得不覆盖图像模型或为您制作一个装饰器,告诉回形针使用 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"

您可以根据需要更改这些属性,但重要的是您指定 :storage 和 :s3_credentials。

【讨论】:

  • 如果您碰巧将 Spree 升级到较新的版本,例如 1.0.x,我建议您将 gem 从 aws-s3 更改为 aws-sdk,因为前者已被弃用。另一种快速的方法是使用 spree-heroku 扩展 github.com/joneslee85/spree-heroku。如果您选择 Spree 1.1.x,则无需安装任何扩展或覆盖模型,您可以在管理员设置中进行配置。希望对您有所帮助。
【解决方案2】:

在当前版本的 Spree 中,您可以在管理工具中设置这些值。但是,如果您希望在代码中维护它但不覆盖 Image 模型,您可以在 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

【讨论】:

    【解决方案3】:

    您也可以在http://bitnami.org/stack/spree 试用 BitNami Spree AMI。问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 2014-11-05
      相关资源
      最近更新 更多