我有一个 Rails 应用程序 (3.2.12),我想通过 HTTP Accept-Language 标头添加区域设置切换。
我为实现这一目标所做的工作:
我将 rack-contrib 添加到我的 Gemfile 中:
gem 'rack-contrib', require: 'rack/contrib'
运行bundle install
,将中间件添加到我的config/application.rb
:
config.middleware.use Rack::Locale
并检查我的控制器的请求环境:
puts request.env.keys.select{|v| v=~/rack/ }
我运行的规范是一个控制器规范,它包含render_views
在其中。
我的问题:
请求环境中没有rack.locale
密钥。我仔细检查了rake middlware
,它在最后列出Rack::Locale
,就在之前run MyApp::Application.routes
。
经过一些调试后,我发现运行时从未调用过中间件
rspec spec/controllers/authentication_controller_spec.rb
但是:在请求环境中运行相同的代码script/rails s thin
会给我更多的键,即:
rack.request.cookie_string
rack.locale
rack.request.query_string
rack.request.query_hash
所以,我想问题是:为什么 RSpec 拒绝选择 Rack 中间件?