Тестирование Carrierwave с рельсами

Недавно я связал свое приложение Rails с Amazon S3, чтобы мои пользователи могли загружать файлы, пока я размещаю их на Heroku. Я следовал за учебником в Firehose Project:

http://blog.thefirehoseproject.com/posts/switching-carrierwave-to-use-s3-with-heroku-and-localhost/

При первой попытке я получил неопределенную ошибку метода для следующей строки:

config.fog_provider = 'fog/aws'

(Я могу вернуться к старому коммиту, если вы считаете, что точный текст этой старой ошибки будет полезен.)

Обращаясь к этой ошибке, единственное решение, которое работало, состояло в том, чтобы установить мою версию carrierwave на '1.0.0.beta'. Я уверен, что использование этой версии не идеально, но это пока единственная, которая работает. Разработка и производство сейчас функционируют, но не тестируются. Каждый тест, который включает в себя загруженный файл, теперь выдает дополнительную ошибку аргумента.

ActionView::Template::Error: wrong number of arguments (given 2, expected 0)

Эта проблема не возникает с большинством версий carrierwave. Но я еще не нашел комбинацию драгоценных камней, которая будет работать во всех трех моих средах.

Заранее спасибо за любые идеи.

# config / initializers / carrierwave.rb

CarrierWave.configure do |config|
  config.fog_provider = 'fog/aws'                        # required
  config.fog_credentials = {
    provider:              'AWS',                        # required
    aws_access_key_id:     ENV["AWS_ACCESS_KEY"],        # required
    aws_secret_access_key: ENV["AWS_SECRET_KEY"],        # required
  }
  config.fog_directory  = ENV["AWS_BUCKET"]              # required
end

Пример строки кода с ошибкой

<%= link_to image_tag(question.picture.image_url(:thumb).to_s), edit_question_path(question), :id => "schmedit_#{question.id}" %>

Gemfile

source 'https://rubygems.org'

gem 'rails',          '5.0.0'
gem 'bcrypt',         '3.1.11'
gem 'faker',          '1.6.3'
gem 'will_paginate',           '3.1.0'
gem 'bootstrap-will_paginate', '0.0.10'
gem 'bootstrap-sass', '3.3.6'
gem 'puma',           '3.4.0'
gem 'sass-rails',     '5.0.5'
gem 'uglifier',       '3.0.0'
gem 'coffee-rails',   '4.2.1'
gem 'jquery-rails',   '4.1.1'
gem 'jquery-ui-rails'
gem 'turbolinks',     '5.0.0'
gem 'jquery-turbolinks'
gem 'jbuilder',       '2.4.1'
gem 'best_in_place', '~> 3.1'
gem 'responders', '~> 2.2'
gem 'carrierwave', '~> 1.0.0.beta'
gem 'mini_magick', '~> 4.3'
gem 'capybara'
gem 'figaro'
gem 'fog-aws', '0.12.0'

group :development, :test do
  gem 'sqlite3', '1.3.11'
  gem 'byebug',  '9.0.0', platform: :mri
end

group :development do
  gem 'web-console',           '3.1.1'
  gem 'listen',                '3.0.8'
  gem 'spring',                '1.7.1'
  gem 'spring-watcher-listen', '2.0.0'
end

group :test do
  gem 'rails-controller-testing', '0.1.1'
  gem 'minitest-reporters',       '1.1.9'
  gem 'guard',                    '2.13.0'
  gem 'guard-minitest',           '2.4.4'
end

group :production do
  gem 'pg', '0.18.4'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

1 ответ

Это изменение в коде, похоже, решило проблему:

config.fog_provider = 'fog/aws'

вместо этого должно быть:

config.fog_directory = 'fog/aws'

в файле config/initializers/carrierwave.rb

Другие вопросы по тегам