неопределенный метод has_one_attached - Spree, AWS S3, изображения продуктов, Rails - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь подключить свою корзину покупок Spree к AWS S3 для загрузки изображений продуктов, но постоянно получаю сообщение об ошибке:

.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activerecord-5.2.0/lib/active_record/dynamic_matchers.rb:22:in `m
ethod_missing': undefined method `has_one_attached'

Вот мои настройки:

Gemfile

ruby '2.4.0'
gem 'rails', '~> 5.2.0'
gem 'spree', '~> 3.6.0'
gem 'spree_auth_devise', '~> 3.3'
gem 'spree_gateway', '~> 3.3'
gem 'globalize', github: 'globalize/globalize'
gem 'spree_i18n', github: 'spree-contrib/spree_i18n'
gem 'spree_globalize', github: 'spree-contrib/spree_globalize', branch: 'master'
gem 'spree_static_content', github: 'spree-contrib/spree_static_content'
gem 'aws-sdk', '~> 2.3'

config / initializers / spree.rb

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_region:      ENV['S3_REGION'],
    s3_headers:     { "Cache-Control" => "max-age=31557600" },
    s3_protocol:    "https",
    bucket:         ENV['S3_BUCKET_NAME'],
    url:            ":s3_domain_url",

    styles: {
        mini:     "48x48>",
        small:    "100x100>",
        product:  "240x240>",
        large:    "600x600>"
    },

    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

Кто-нибудь сталкивался с этой ошибкой и есть решение?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Строки комментариев attachment_config в spree.rb

Объявить службы Active Storage в config/storage.yml.Для каждой службы, используемой вашим приложением, укажите имя и необходимую конфигурацию.

amazon:
  service: S3
  access_key_id: ""
  secret_access_key: ""
  bucket: ""
  region: "" # e.g. 'us-east-1'

Чтобы использовать службу Amazon S3 в рабочей среде, добавьте в config/environments/production.rb следующее:

config.active_storage.service = :amazon

Добавьте драгоценный камень aws-sdk-s3 в свой Gemfile:

gem "aws-sdk-s3", require: false

Источник: http://edgeguides.rubyonrails.org/active_storage_overview.html#setup

0 голосов
/ 20 июля 2018

Этот конфиг не работает и для меня.На самом деле шаги довольно просты.Объявите конфигурации amazon в storage.yml, добавьте гем aws, и вы готовы к работе.В документации ActiveStorage есть все.http://edgeguides.rubyonrails.org/active_storage_overview.html#setup

...