rails generate dragonfly возвращает неопределенный метод public_key= для # <Recaptcha после миграции с Heroku на выделенный сервер

Сайт был перенесен с Heroku на выделенный сервер Ubuntu, и после миграции сайт работает нормально, за исключением изображений, размещенных на S3.

При загрузке страниц с изображениями будет возвращен следующий тип ошибки:

Completed 200 OK in 1428.8ms (Views: 505.5ms | ActiveRecord: 322.2ms)
Started GET "/system/images/W1siZiIsIjIwMTYvMDkvMjIvMTMvMjQvMjUvMjE1L05hb21pX1NhbnNvbS5qcGciXSxbInAiLCJ0aHVtYiIsIjM2MHgzNjAjIl1d/picture.jpg" for ip at 2016-11-23 00:27:24 +0000

Dragonfly::Configurable::NotConfigured (You need to configure Dragonfly::DataStorage::S3DataStore with bucket_name):

Я вижу, что в приложении не было стрекозы, указанной в gemfile, поскольку Heroku, похоже, делает все по-другому, и переустановили стрекозу, но при попытке создать файл конфигурации появляется следующая ошибка.

# rails generate dragonfly
appdir/config/initializers/recaptcha.rb:2:in `block in <top (required)>': undefined method `public_key=' for #<Recaptcha::Configuration:0x0000000521f070> (NoMethodError)
        from appdir/vendor/bundle/ruby/2.0.0/gems/recaptcha-4.0.0/lib/recaptcha.rb:30:in `configure'
        from appdir/config/initializers/recaptcha.rb:1:in `<top (required)>'
        from appdir/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.18/lib/active_support/dependencies.rb:245:in `load'
        from appdir/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.18/lib/active_support/dependencies.rb:245:in `block in load'
        from appdir/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.18/lib/active_support/dependencies.rb:236:in `load_dependency'
        from appdir/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.18/lib/active_support/dependencies.rb:245:in `load'
        from appdir/vendor/bundle/ruby/2.0.0/gems/railties-3.2.18/lib/rails/engine.rb:593:in `block (2 levels) in <class:Engine>'
        from appdir/vendor/bundle/ruby/2.0.0/gems/railties-3.2.18/lib/rails/engine.rb:592:in `each'
        from appdir/vendor/bundle/ruby/2.0.0/gems/railties-3.2.18/lib/rails/engine.rb:592:in `block in <class:Engine>'
        from appdir/vendor/bundle/ruby/2.0.0/gems/railties-3.2.18/lib/rails/initializable.rb:30:in `instance_exec'
        from appdir/vendor/bundle/ruby/2.0.0/gems/railties-3.2.18/lib/rails/initializable.rb:30:in `run'
        from appdir/vendor/bundle/ruby/2.0.0/gems/railties-3.2.18/lib/rails/initializable.rb:55:in `block in run_initializers'
        from appdir/vendor/bundle/ruby/2.0.0/gems/railties-3.2.18/lib/rails/initializable.rb:54:in `each'
        from appdir/vendor/bundle/ruby/2.0.0/gems/railties-3.2.18/lib/rails/initializable.rb:54:in `run_initializers'
        from appdir/vendor/bundle/ruby/2.0.0/gems/railties-3.2.18/lib/rails/application.rb:136:in `initialize!'
        from appdir/vendor/bundle/ruby/2.0.0/gems/railties-3.2.18/lib/rails/railtie/configurable.rb:30:in `method_missing'
        from appdir/config/environment.rb:5:in `<top (required)>'
        from appdir/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.18/lib/active_support/dependencies.rb:251:in `require'
        from appdir/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.18/lib/active_support/dependencies.rb:251:in `block in require'
        from appdir/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.18/lib/active_support/dependencies.rb:236:in `load_dependency'
        from appdir/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.18/lib/active_support/dependencies.rb:251:in `require'
        from appdir/vendor/bundle/ruby/2.0.0/gems/railties-3.2.18/lib/rails/application.rb:103:in `require_environment!'
        from appdir/vendor/bundle/ruby/2.0.0/gems/railties-3.2.18/lib/rails/commands.rb:25:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'

Кажется, что сама рекапча работает нормально, и установка пакета не возвращала никаких ошибок, но я не могу заставить стрекозу работать.

recaptcha.rb выглядит так

Recaptcha.configure do |config|
  config.public_key  = 'public key'
  config.private_key = 'private key'
  config.api_version = 'v2'
end

Я создал.env файл, который не существует, со следующим содержанием:

export RECAPTCHA_PUBLIC_KEY = 'public key'
export RECAPTCHA_PRIVATE_KEY = 'private key'

Я также попытался вручную добавить в config/environment /production.rb и config/environment /development.rb следующее:

recaptcha_public_key= "[PUBLIC KEY]"
recaptcha_private_key= "[PRIVATE KEY]"

Я не уверен, что мне здесь не хватает, есть ли у кого-нибудь опыт работы с dragonfly и recaptcha после перехода с Heroku на автономную систему Linux

1 ответ

Решение

Они изменили API с версией 4, поэтому, если вы устанавливаете его через gemfile без указания версии и по умолчанию используется версия 4, вам нужно будет внести изменения в конфигурацию.

Из их CHANGELOG.md:

4.0.0 - 2016-11-14

public_key -> site_key and private_key -> secret_key

Измени свой config/initializers/recaptcha.rb к этому:

Recaptcha.configure do |config|
  config.site_key  = 'public key'
  config.secret_key = 'private key'
  ...
Другие вопросы по тегам