Ruby on rails 如何在rails中为url帮助程序设置默认主机?

Ruby on rails 如何在rails中为url帮助程序设置默认主机?,ruby-on-rails,url,configuration,Ruby On Rails,Url,Configuration,我想做这样的事情 config.default_host = 'www.subdomain.example.com' # config/production.rb config.action_controller.default_url_options = { host: 'myproduction.com' } 在我的一些配置文件中,以便object\u urlhelpers(ActionView::helpers::UrlHelper)生成以 我试图搜索文档,但除了ActionMaile

我想做这样的事情

config.default_host = 'www.subdomain.example.com'
# config/production.rb
config.action_controller.default_url_options = { host: 'myproduction.com' }
在我的一些配置文件中,以便
object\u url
helpers(
ActionView::helpers::UrlHelper
)生成以


我试图搜索文档,但除了
ActionMailer
docs之外,我什么也没找到,这对我没有用,因为我不知道该在哪个pat中查找。是否有一个地方描述了Rails::Initializer.config的整个结构?

有这样一个地方,但我不太确定他们是否是您所指的帮助者:

ActionController::Base.asset_host = "assets.example.com"

据我所知,
*\u url
帮助程序使用服务器配置的主机名。例如,如果我的Apache安装在
http://www.myapp.com/
然后Rails将使用该地址。这就是为什么开发环境中的
*\uURL
方法指向
http://localhost:3000默认情况下,


上一个答案中建议的资产主机只会影响
图像标签
样式表链接标签
javascript链接标签
助手。

NSD的解决方案是我如何做到这一点,但我必须添加一个块以使其与https一起工作:

config.action_controller.asset_host = Proc.new { |source, request|
  (request ? request.protocol : 'http://') +  "www.subdomain.example.com"
}

asset\u host
不适用于URL

您需要覆盖
应用程序控制器中的
默认\u url\u选项
(至少在Rails 3中)

class ApplicationController“myproduction.com”}
其他的
{}
结束
结束
结束

在环境配置中定义默认主机:

# config/environments/staging.rb
MyApp::Application.configure do
  # ...
  Rails.application.routes.default_url_options[:host] = 'preview.mydomain.com'
  # ...
end
然后,您可以在应用程序中的任意位置创建URL:

Rails.application.routes.url_helpers.widgets_url()
或者在类中包含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'

另一种方法是这样设置

config.default_host = 'www.subdomain.example.com'
# config/production.rb
config.action_controller.default_url_options = { host: 'myproduction.com' }

您可以为每个url帮助器轻松设置
:host
或/和
:only_path
参数。

您的url(参数:host=>)http://example.com“,:only_path=>Rails.env.test?)

这样,您就不会在您的环境中设置全局默认url选项,除非您愿意。

这是一个好主意,但至少在我的情况下,它不起作用。我有一个服务器名为subdomain.example.com的虚拟服务器,并且*\u url帮助程序只使用example.com。我也尝试过查看环境变量,我得到的HTTP_HOST是subdomain.example.com,因此我非常确定它是正确的。我的意思是我在问题中添加了这一点的助手。
asset_HOST
处理的是资产管道的主机,而不是应用程序的路由。asset HOST是资产管道的主机,不是申请的路线。谁是NSD,你把代码放在哪里了?我假设它位于应用程序控制器或/config/environments中的某个特定于环境的文件中。由于这是一个帮助人们解决问题的网站,因此清晰性非常重要。NSD是一个评论人,其帖子已被删除。目前它的
Rails.application.default\u url\u options
,没有。routes@MarcinAdamczyk你是说在Rails 4中?当然是在Rails 4中,我不记得Rails 3中有这个选项,或者您可以在production.rb#production.rb config.action(控制器)default(默认)url(选项{host:'myproduction.com'}您好,很抱歉重新打开它,但我有一个快速的问题:我们能在:主机值中放入多个地址吗?关于这在rails 5引擎中如何工作的任何更新?设置
config.action\u controller.default\u url\u options={host:'myproduction.com'}
不是线程安全的。建议重写ApplicationCantorler中的方法,也就是说。我有与@CHawk相同的经验。它似乎不适用于Rails 6.1。