我们当前的Rails应用程序是由作为引擎安装的子应用程序构成的。通常,这些引擎安装在主routes.rb
文件的子域中,如下所示
mount MySubApp::Engine => '/', as: :sub_app, constraints: {subdomain: 'sub_app'}
MySubApp
的{{1}}文件中的路由在使用指定的routes.rb
帮助程序时获取子域名。例如_url
apps/my_sub_app/config/routes.rb
给我们MySubApp::Engine.routes.draw do
resources :foos
end
,但结果是
的http:// WWW .example.com的/ FOOS / 5
我们想要的时候
的http:// sub_app .example.com的/ FOOS / 5
如何将引擎的安装约束传递给其命名路由?
虽然我仍然更喜欢更好的解决方案,但以下方法仍然有效。您可以将每个子应用sub_app.foo_url(5)
文件中的所有路径包装起来,这些文件可以安装在子域中,如此
routes.rb
评论者(自删除后?)指出您可以向帮助者传递MySubApp::Engine.routes.draw do
constraints Rails.application.routes.named_routes[:sub_app].constraints do
resources :foos
end
end
选项,但我们希望避免对每个跨子域链接使用subdomain
。即使我们将子域名移动到ENV var并创建了一个包装器,这也不是DRY。
答案 0 :(得分:1)
@Aaron不确定你是否修复过这个问题,但请查看
config.action_dispatch.tld_length
设置(在引擎的配置上)。我不确定它会如何对引擎做出反应,但在我们的例子中它让我们处理我们的登台服务器的子子域的情况(所以当我们将_url
助手与登台服务器一起使用时,它正确地做了subdomain.staging.domain.com
,而不是subdomain.domain.com
)。
答案 1 :(得分:0)