Измените протокол на https во всех помощниках рельсов
Rails 3.1+
Я хочу, чтобы мои помощники url использовали протокол https, не указывая его в каждом помощнике, который я вызываю.
После поиска я нашел разные способы, но никто не работает, например:
ROUTES_PROTOCOL = (ENV["RAILS_ENV"] =~ /development/ ? 'http://' : 'https://')
scope :protocol => ROUTES_PROTOCOL, :path => "/app" do
Как это можно сделать?
Ответы
Ответ 1
Значит, вы хотите в основном для ссылок в электронных письмах?
Я думаю, что это будет работать в вашем production.rb, development.rb или в любой другой среде.
config.action_mailer.default_url_options = {
:host => 'yourwebsite.com',
:protocol => 'https'
}
# Makes it possible to use image_tag in mails
config.action_mailer.asset_host = "https://yourwebsite.com"
Ответ 2
Если вы используете Rails 4, определение ApplicationController#default_url_options
не работает. Параметры URL теперь определены в конфигурации маршрутов приложений:
Rails.application.routes.draw do
default_url_options protocol: :https
end
Ответ 3
В Rails 5.1.4 я протестировал следующие сценарии:
# in development.rb
config.action_controller.default_url_options({:protocol => 'https'})
config.action_controller.default_url_options(:protocol => 'https')
# Does not work
# in development.rb, outside config block
Rails.application.routes.default_url_options[:protocol] = 'https'
# Does not work, but works under console
# in routes.rb
Rails.application.routes.draw do
default_url_options protocol: :https
# Does not work, but works under console
# in ApplicationController
def default_url_options(options={})
{ secure: true }
end
# Does not work
# in ApplicationController
def default_url_options
{ protocol: :https }
end
# Works in browser, but does not work under console
# in development.rb
config.action_controller.default_url_options= {:protocol => 'https'}
# Works in browser, but does not work under console
Ответ 4
Если вы хотите принудительно использовать SSL в своем приложении, это можно сделать, установив config.force_ssl
в true в вашем application.rb
(или в вашем конкретном окружении файле). Подробнее о теме здесь
ИЗМЕНИТЬ
Хорошо, поэтому я не нахожу достаточно доказательств для этого, но я думаю, что вы можете переопределить default_url_options=(options={})
в контроллере приложения и установить :protocol => :https
в тело функции. Если это не трюк для ваших писем, вам придется повторить процедуру в конфигурации вашей среды, добавив config.action_mailer.default_url_options
. Надеюсь, это так!
Ответ 5
Вы можете добавить этот код в ApplicationController
def default_url_options(options={})
options.merge(protocol: :https)
end
Вы также можете проверить помощники URL-адресов Rails для автоматического вывода https-адресов
Ответ 6
Какую среду вы хотите использовать ssl (https://), просто добавьте эти строки конфигурации в свой файл конфигурации в config/environments
:
YOURAPPNAME::Application.configure do
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true
end
Ответ 7
В Rails 3.2.1 по умолчанию force_ssl истинно, пусть проверяет
- Откройте конфигурацию/среды/production.rb и выполните поиск "config.force_ssl"
config.force_ssl = true - не нужно менять
теперь в config/environment/development.rb - не нужно размещать config.force_ssl, он должен работать, потому что ваш сервер работает локально.
Хорошо, вот еще один вид
if !request.ssl?
"https://" + request.host + request.request_uri
elsif request.ssl?
"http://" + request.host + request.request_uri
end
Добавьте def в вспомогательную базу выше, если else и в ActionView:: Helpers,
существует метод url_for, который может получить то, что вы хотите, если вы начнете использовать его.
Ответ 8
Я пробовал все ответы выше, только это работает для меня:
конфигурации/среда/production.rb
Rails.application.routes.default_url_options[:protocol] = 'https'
ruby 2.1.4p265 (версия 2014-10-27 48166) [x86_64-linux] Rails 3.2.22.5
Ответ 9
Для приложения RESTAPI rails 5.2.0 сработало следующее:
В каждом окружении файл по необходимости, т.е. config/environment/test.rb
Rails.application.routes.default_url_options[:protocol] = 'https'
Код контроллера:
Rails.application.routes.url_helpers.url_for(uploaded_file)