Измените протокол на https во всех помощниках рельсов - PullRequest
12 голосов
/ 29 февраля 2012

Рельсы 3.1+ Я хочу, чтобы мои помощники по URL использовали протокол https без необходимости указывать его в каждом вызываемом мной помощнике. После поиска я нашел несколько способов, но ни один из них не работает, например:

 ROUTES_PROTOCOL = (ENV["RAILS_ENV"] =~ /development/ ? 'http://' : 'https://')

scope :protocol => ROUTES_PROTOCOL, :path => "/app" do

Как это можно сделать?

Ответы [ 9 ]

14 голосов
/ 29 февраля 2012

То есть вы хотите использовать его в основном для ссылок в электронных письмах?

Я думаю, это будет работать в вашем 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"
13 голосов
/ 09 февраля 2016

Если вы используете Rails 4, определение ApplicationController#default_url_options не работает.Параметры URL теперь определены в конфигурации маршрутов приложения:

Rails.application.routes.draw do
  default_url_options protocol: :https
end
5 голосов
/ 14 февраля 2018

В 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
2 голосов
/ 12 февраля 2018

Я попробовал все ответы выше, только это работает для меня:

config / environment / 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

2 голосов
/ 29 февраля 2012

Если вы хотите включить SSL в своем приложении, это можно сделать, установив для config.force_ssl значение true в вашем application.rb (или в файле, специфичном для вашей среды). Подробнее по теме здесь

EDIT Итак, я не нашел достаточных доказательств этого, но я думаю, что вы можете переопределить default_url_options=(options={}) в контроллере приложения и установить :protocol => :https в теле функции. Если это не подходит для ваших писем, вам придется повторить процедуру в вашей конфигурации среды, добавив config.action_mailer.default_url_options. Надеюсь, что это делает это!

1 голос
/ 03 октября 2017

Вы можете добавить этот код к ApplicationController

  def default_url_options(options={})
    options.merge(protocol: :https)
  end

Вы также можете обратиться к Получение Rails помощников URL для автоматического вывода https urls

0 голосов
/ 26 апреля 2019

Для рельсов 5.2.0 Приложение RESTAPI работало следующее:

В каждом файле среды по мере необходимости, т.е. config / environment / test.rb

  Rails.application.routes.default_url_options[:protocol] = 'https'

Код контроллера:

 Rails.application.routes.url_helpers.url_for(uploaded_file)
0 голосов
/ 29 февраля 2012

В Rails 3.2.1, по умолчанию force_ssl имеет значение true, давайте проверим

  1. Откройте config / environment / 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 в базу помощников выше, если не указано и в ActionView :: Helpers , есть метод url_for, который может дать вам то, что вы хотите, если вы начнете его использовать.

0 голосов
/ 29 февраля 2012

В какой бы среде вы не хотели использовать 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
...