我有一个rails 3.0.10应用程序,我在应用程序目录中可用,如下所示:
https://apps.example.com/myRails3App
服务器是使用乘客的RHEL 5。开箱即用的应用程序运行良好,我不必将我的路由包装在范围内。
然后我从新域设置CNAME别名以指向应用程序,如下所示:
http://great.vanityurl.com
现在,在重新部署应用程序并重新启动服务器之后,当我从apps.example.com/myRails3App访问应用程序时,从“stylesheet_link_tag”(或“javascript_include_tag”)调用的所有资产都在“apps”中查找资产.example.com / stylesheets“而不是正确的”apps.example.com/myRails3App/stylesheets“(尽管标准链接标记正常工作)。
同时,该应用程序从虚荣心看起来很棒,因为对great.vanityurl.com/stylesheets的引用可以正确解析。
似乎我应该使用像Rails这样的“relative_url_root”,但这当然不能在rails 3.0.10中找到(据我所知)。
我应该怎么做以确保应用程序的外观和功能完全相同,无论是通过原始位置(apps.example.com/myRails3App)还是虚荣网址(great.vanityurl.com)访问它?
答案 0 :(得分:2)
您可以使用以下组合解决您的紧急问题:
config.action_controller.asset_host = 'apps.example.com'
config.assets.prefix = "/myRails3App"
直接控制您提到的Rails资产助手生成的URL。
答案 1 :(得分:0)
Winfield的答案适用于Rails 3.1,但3.0不喜欢'config.assets.prefix ='。
值得庆幸的是,虽然它不是最终的解决方案,但他用'config.action_controller.asset_host =“指出了正确的方向。在检查了资产主机的主要方法之后,我发现了资产错误=。
我最终把它放在我的application.rb中:
config.action_controller.asset_path = proc { |asset_path|
if (Rails.env != "development_local") and (!asset_path.starts_with?("/myRails3App"))
"/myRails3App#{asset_path}"
else
asset_path
end
}
在部署期间,我让我的capistrano脚本生成一个从{app_root} / public到{app_root} / public / myRails3App的符号链接,允许对myRails3App / stylesheets的所有资产调用,无论用户是否正在访问来自需要应用程序目录的URL。
此解决方案感觉很脏,但它有效。
感谢Winfield,帮助我让我的应用程序正常运行。