在生产时使用Devise,Confirmable时,未定义的方法会闪烁

时间:2015-12-30 20:55:41

标签: ruby-on-rails heroku devise

我正在使用Devise和Rails 4.2上的可确认模块。我使用ConfirmationsController after_confirmation_path_for编写了自定义/app/auth。我正在测试的基本场景是:

scenario 'A user can confirm their account by clicking a link in the email' do
  user = create(:user, email: 'bob@acme.com')
  open_email(user.email)

  expect(current_email.subject).to eq('Finish creating your account on Hourglass')

  current_email.click_link 'Create an account on Hourglass'

  expect(user.reload.confirmed_at).not_to be_nil
  expect(current_path).to eq('/app/auth')
end

哪个有效。但是,在生产中(应用程序部署在Heroku上),我收到以下错误:

NoMethodError (undefined method `flash' for #<ActionDispatch::Request:0x007f68c8a29120>): 
  vendor/bundle/ruby/2.0.0/gems/actionpack-4.2.0/lib/action_controller/metal/flash.rb:9:in `flash' 
  vendor/bundle/ruby/2.0.0/gems/devise-3.5.3/app/controllers/devise_controller.rb:153:in `set_flash_message' 
  vendor/bundle/ruby/2.0.0/gems/devise-3.5.3/app/controllers/devise/confirmations_controller.rb:25:in `show' 

在默认控制器的show方法中为this line

还有一些关于如何解决这个问题的其他问题,但它们针对的是rails-api应用程序;我的应用程序是一个完整的rails应用程序。

通过将以下配置添加到我的application.rb

,我能够“解决”这个问题
config.middleware.use ActionDispatch::Flash

但我想(1)理解为什么只在生产中发生这种情况,并且(2)有一个规范来保证这个功能正在发挥作用。

0 个答案:

没有答案