2012-02-28 63 views
9

Rails 3.1+ 我希望我的url助手能夠使用https協議,而無需在每次調用幫助程序時指定它。在所有rails helpers中將協議更改爲https

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

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

如何才能做到這一點: 左右,我發現不同的方式,但沒有工作,例如搜索後?

回答

0

要使用SSL(HTTPS://)無論環境,只需要添加這個配置行其配置文件中config/environments:如果要強制你的應用SSL

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 
+2

這將導致請求協議爲http時的重定向,但我希望在url助手中使用https,主要用於電子郵件中的鏈接。 – 99miles

1

,這可能是通過在您的application.rb(或您的環境特定文件)中將config.force_ssl設置爲true來完成。更多關於這個問題here

編輯 好了,所以我沒有找到足夠的證據這一點,但我認爲你可以在應用控制器覆蓋default_url_options=(options={}),並且在函數體設置:protocol => :https。如果這不適用於您的電子郵件,則必須通過添加config.action_mailer.default_url_options在環境配置中重複該過程。希望這是它!

+1

當請求協議爲http時,會導致重定向,但我希望在url helpers中使用https,主要用於電子郵件中的鏈接。 – 99miles

0

在Rails 3.2.1,默認情況下force_ssl是真實的,讓我們檢查

  1. 打開配置/環境/ production.rb而求索 「config.force_ssl」

config.force_ssl =真 - 無需更改

現在在config/environments/development.rb - 無需放置config.force_ssl,它應該可以正常工作,因爲您的服務器在本地運行。

好,這裏是另一種觀點

if !request.ssl? 
    "https://" + request.host + request.request_uri 
elsif request.ssl? 
    "http://" + request.host + request.request_uri 
end 

在幫助基地加入高清以上的if else並在ActionView::Helpers, 有可能讓你一個url_for方法,你想要什麼,如果你開始使用。

+1

當請求協議爲http時,會導致重定向,但我希望在url助手中使用https,主要用於電子郵件中的鏈接。 – 99miles

+0

@ 99miles - 我改變了答案,請檢查,讓我知道這是否適合你。 –

12

所以你希望它主要用於電子郵件中的鏈接?

我認爲這將適用於您的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" 
12

如果您使用Rails 4,定義ApplicationController#default_url_options不起作用。現在URL選項在應用程序的路由配置定義:

Rails.application.routes.draw do 
    default_url_options protocol: :https 
end 
+10

我將下列內容放入我的production.rb文件中。 'Rails.application.routes.default_url_options [:protocol] ='https'' – gitb

+0

只適用於Rails 5.1.4的控制檯。 – lulalala

0

我嘗試了上述所有的答案,這適用於我:

config/environments/production.rb

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

紅寶石2.1.4p265(2014年10月27日修訂版48166)[x86_64的Linux的]的Rails 3.2.22.5

0

在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