我想做这样的事情
config.default_host = 'www.subdomain.example.com'
在我的一些配置文件中,以便object_url
助手(ActionView::Helpers::UrlHelper
)生成以http://www.subdomain.example.com开头的链接
我试图搜索文档,但除了ActionMailer
文档和http://api.rubyonrails.org/classes/Rails/Configuration.html之外我没有找到任何对我没用的内容,因为我不知道要看哪个文件。有没有描述Rails :: Initializer.config的整个结构的地方?
答案 0 :(得分:52)
asset_host
不适用于网址
您需要覆盖default_url_options
中的ApplicationController
(至少在Rails 3中)
http://edgeguides.rubyonrails.org/action_controller_overview.html#default-url-options
class ApplicationController < ActionController::Base
def default_url_options
if Rails.env.production?
{:host => "myproduction.com"}
else
{}
end
end
end
答案 1 :(得分:46)
在您的环境配置中定义默认主机:
# config/environments/staging.rb
MyApp::Application.configure do
# ...
Rails.application.routes.default_url_options[:host] = 'preview.mydomain.com'
# ...
end
然后,您可以在应用中的任意位置创建网址:
Rails.application.routes.url_helpers.widgets_url()
或在您的课程中包含网址助手:
class MyLib
include Rails.application.routes.url_helpers
def make_a_url
widgets_url
end
end
如果您没有定义默认主机,则需要将其作为选项传递:
widgets_url host: (Rails.env.staging? ? 'preview.mydomain.com' : 'www.mydomain.com')
指定协议之类的东西也很有用:
widgets_url protocol: 'https'
答案 2 :(得分:28)
另一种方法是将其设置为
# config/production.rb
config.action_controller.default_url_options = { host: 'myproduction.com' }
答案 3 :(得分:3)
您可以轻松为每个url_helper设置:host
或/和:only_path
参数。
yours_url(params, :host => "http://example.com", :only_path => Rails.env.test?)
这样您就不会在环境中设置全局default_url_options,除非您需要。
答案 4 :(得分:0)
据我所知,*_url
助手使用服务器配置的主机名。因此,例如,如果我的Apache安装在http://www.myapp.com/
接受对此Rails应用程序的请求,那么Rails将使用该地址。这就是为什么开发环境中的*_url
方法默认指向http://localhost:3000
。
上一个答案中建议的资源主机只会影响image_tag
,stylesheet_link_tag
和javascript_link_tag
帮助。
答案 5 :(得分:-4)
使用rails中的全局变量获取动态域网址的最简单方法。
class ApplicationController < ActionController::Base
def base_url
$base_url = request.base_url
end
end
在您的头文件<% base_url %>
中调用此方法后,现在您可以在应用程序的任何位置访问您的域名网址。
答案 6 :(得分:-5)
NSD的解决方案是我如何做到这一点,但我必须添加一个块才能使其与https一起使用:
config.action_controller.asset_host = Proc.new { |source, request|
(request ? request.protocol : 'http://') + "www.subdomain.example.com"
}
答案 7 :(得分:-10)
就是这样,但我不是非常确定他们是否是你所指的助手:
ActionController::Base.asset_host = "assets.example.com"
http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html