Сначала я покажу, как форсировать SSL в текущей и более ранних версиях Rails, а затем в конце я написал, как использовать HTTP и HTTPS параллельно друг с другом, что, как я думаю, вы ищете.
Рельсы> = 3,1 Просто используйте config.force_ssl = true
в конфигурации вашей среды.
# config/application.rb
module MyApp
class Application < Rails::Application
config.force_ssl = true
end
end
Вы также можете выборочно включить https в зависимости от текущей среды Rails.Например, вы можете оставить HTTPS выключенным при разработке и включить его при подготовке / производстве.
# config/application.rb
module MyApp
class Application < Rails::Application
config.force_ssl = false
end
end
# config/environments/production.rb
MyApp::Application.configure do
config.force_ssl = true
end
Rails <3.1 </strong>
На всякий случай, если у вас есть какие-либо проекты, которые не являются Rails 3.1 и которым нужна та же функция.Включите HTTPS, добавив следующую строку в конфигурацию вашей среды.
config.middleware.insert_before ActionDispatch::Static, "Rack::SSL"
Обратите внимание, что я передаю Rack::SSL
в виде строки, чтобы делегировать загрузку класса в конце инициализации приложения Rails.Также обратите внимание, что промежуточное программное обеспечение должно быть вставлено в определенную позицию в стеке, по крайней мере до ActionDispatch::Static
и ActionDispatch::Cookies
.
Не забудьте определить зависимость Rack :: SSL в вашем Gemfile.
# Gemfile
gem 'rack-ssl', :require => 'rack/ssl'
Параллельное включение HTTPS и HTTP
Rack::SSL
имеет очень интересную и недокументированную функцию.Вы можете передать опцию :exclude
, чтобы определить, когда включать / отключать использование HTTPS.
Следующий код включает Rack::SSL
и все его фильтры только в том случае, если запрос исходит от соединения HTTPS.
config.middleware.insert_before ActionDispatch::Static, Rack::SSL, :exclude => proc { |env| env['HTTPS'] != 'on' }
Оба следующих URL будут работать, но первый вызовет фильтры Rack::SSL
.
https://secure.example.com
http://example.com