在所有rails帮助程序中将协议更改为https

99m*_*les 12 https routes ruby-on-rails helpers ruby-on-rails-3

Rails 3.1+我希望我的url帮助程序使用https协议,而不必在我调用的每个帮助程序中指定它.搜索后我发现了各种各样的方法但没有工作,例如:

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

scope :protocol => ROUTES_PROTOCOL, :path => "/app" do
Run Code Online (Sandbox Code Playgroud)

如何才能做到这一点?

Mic*_*per 14

所以你想要它主要用于电子邮件中的链接?

我认为这将适用于您的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"
Run Code Online (Sandbox Code Playgroud)


ilo*_*aly 13

如果您使用的是Rails 4,则定义ApplicationController#default_url_options不起作用.URL选项现在在应用程序的路由配置中定义:

Rails.application.routes.draw do
  default_url_options protocol: :https
end
Run Code Online (Sandbox Code Playgroud)

  • 我将以下内容放在我的production.rb文件中.`Rails.application.routes.default_url_options [:protocol] ='https'` (12认同)

lul*_*ala 5

在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
Run Code Online (Sandbox Code Playgroud)

  • 你知道了吗 (2认同)

The*_*hop 0

无论您想在哪种环境中使用 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
Run Code Online (Sandbox Code Playgroud)

  • 当请求协议为 http 时,这将导致重定向,但我希望在 url 帮助器中使用 https,主要用于电子邮件中的链接。 (6认同)