2015-07-10 72 views
1

我曾尝试在线阅读很多东西,但都没有帮助。所以需要一个具体的答案。我如何配置S3以使用Spree? 我正在使用Spree 3.0.1和Rails 4.2.1。如何使用Spree设置Amazon S3?

我已经spree.rb为:

Spree.config do |config| 
    # Example: 
    # Uncomment to override the default site name. 
    # config.site_name = "Gazella Running Costumes" 
    # config.logo = "store/rungazella.png" 

    #S3 configuration 
    if Rails.env.production? then 
     #production. Store images on S3. 
     # development will default to local storage 
     attachment_config = { 
     s3_credentials: { 
     access_key_id: ENV["S3_KEY"], 
     secret_access_key: ENV["S3_SECRET"], 
     bucket: ENV["S3_BUCKET"], 
     }, 


     storage:  :s3, 
     s3_headers:  { "Cache-Control" => "max-age=31557600" }, 
     s3_protocol: "https", 
     bucket:   ENV["S3_BUCKET"], 

     path:   ":rails_root/public/:class/:attachment/:id/:style/:basename.:extension", 
     default_url: "/:class/:attachment/:id/:style/:basename.:extension", 
     default_style: "product", 
     } 

     attachment_config.each do |key, value| 
      Spree::Image.attachment_definitions[:attachment][key.to_sym] = value 
     end 
    end 
Spree.user_class = "Spree::User" 
end 

也是我的Gemfile是

source 'https://rubygems.org' 
gem 'rails', '4.2.1' 
ruby '2.2.0' 
gem 'sass-rails', '~> 5.0' 
gem 'uglifier', '>= 1.3.0' 
gem 'coffee-rails', '~> 4.1.0' 
gem 'jquery-rails' 
gem 'turbolinks' 
gem 'jbuilder', '~> 2.0' 
gem 'sdoc', '~> 0.4.0', group: :doc 
group :development, :test do 
    gem 'byebug' 
    gem 'web-console', '~> 2.0' 
    gem 'spring' 
end 
gem 'spree', '3.0.1' 
gem 'spree_gateway', github: 'spree/spree_gateway', branch: '3-0-stable' 
gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: '3-0-stable' 
gem 'rails_12factor', group: :production 
gem 'pg' 
gem 'aws-sdk' 
+0

你使用回形针宝石处理图像? –

+0

是的,我正在使用回形针。 –

+0

你有解决方案吗?我正在努力解决这个问题,并且无法正常工作 –

回答

0

你能试着从设置中删除path

path: ":rails_root/public/:class/:attachment/:id/:style/:basename.:extension",

这似乎很奇怪有一个path重新当图像存储在S3中时,会出现Rails根目录。

1

首先你需要用版本少加宝石 'AWS-SDK' 比2.0:

gem 'aws-sdk', '< 2.0' 

然后,你需要在礼包初始化添加以下代码:

Rails.env.production? 
    attachment_config = { 
    s3_credentials: { 
     access_key_id:  ENV['AWS_ACCESS_KEY_ID'], 
     secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 
     bucket:   ENV['S3_BUCKET_NAME'] 
    }, 

    storage:  :s3, 
    s3_headers:  { "Cache-Control" => "max-age=31557600" }, 
    s3_protocol: "https", 
    bucket:   ENV['S3_BUCKET_NAME'], 
    url:   ":s3_domain_url", 

    path:   "/:class/:id/:style/:basename.:extension", 
    default_url: "/:class/:id/:style/:basename.:extension", 
    default_style: "product" 
    } 

    attachment_config.each do |key, value| 
    Spree::Image.attachment_definitions[:attachment][key.to_sym] = value 
    end 
end 
0

使用这种宝石

gem 'aws-sdk', '< 2.0' 

使用此片段在配置/初始化/ spree.rb

spree.config do |config| 
    attachment_config={ 
    s3_credentials: { 
    access_key_id: ENV['AWS_ACCESS_KEY_ID'], 
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 
    bucket: ENV['ENV_BUCKET_NAME'] 
    }, 
    storage:  :s3, 
    s3_headers: {"Cache-Control"=>"max-age=31557600"}, 
    s3_protocol: "https", 
    bucket:  ENV['S3_BUCKET_NAME'], 
    url:   "url", 
    styles:  { 
       mini: "48x48>", 
       small: "100x100>", 
       product:"240x240>", 
       large: "600x600>" 
       }, 
    path:  "/spree/:class/:id/:style/:basename.:extension", 
    default_url: "/spree/products/:id/:style/:basename.:extension", 
    default_style: "product", 
    } 
    attachment_config.each do |key,value| 

    Spree::Image.attachment_definitions[:attachment][key.to_sym] = value 

    end 

end 

source

0

首先从spree.rb施普雷后台删除你的S3的配置设置已经在General Settings => image settings => enable S3此配置。

嘿,你只需要从你的spree后端启用S3。提供那里需要的基本细节。 添加下面一行在你initilizer paperclip.rb

if Rails.env.production? 
    Paperclip.interpolates(:s3_eu_url) do |attachment, style| 
     "#{attachment.s3_protocol}://#{Spree::Config[:s3_host_alias]}/#{attachment.bucket_name}/#{attachment.path(style).gsub(%r{^/}, "")}" 
    end 
    Paperclip::Attachment.default_options[:use_timestamp] = false 
    Paperclip::Attachment.default_options[:s3_protocol] = "https" 
end 

您的附件的URL应该被:s3_eu_url正如我们在initilizer

+0

但我在疯狂3下找不到它。 –

相关问题