2015-07-10 4 views
1

Я пробовал много читать онлайн, ни один из них не помог. Так что нужен конкретный ответ. Как настроить S3 для работы со Spree? Я использую Spree 3.0.1 с Rails 4.2.1.Как настроить Amazon S3 с помощью Spree?

Я 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, что возвращает ваш корень Rails, когда изображение будет сохранено в S3.

1

Сначала нужно добавить Gem '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

Сначала удалите параметры конфигурации S3 из вашего spree.rb Шпрее бэкэнда уже эта конфигурация в General Settings => image settings => enable S3.

Эй, вам просто нужно включить 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 как инициализируется интерполяции для этого URL в initilizer

+0

Но я не могу найти его под весельем 3. –

Смежные вопросы