2012-03-13 53 views
0

我有一个Rails应用程序3.0.10,我的应用程序目录中有可用的,就像这样:Rails 3资产目录可以同时从CNAME根目录和app子目录访问吗?

https://apps.example.com/myRails3App 

服务器是RHEL 5中使用的乘客。开箱即用的应用程序效果很好,我不必将我的路线包裹在范围内。

然后,我建立了一个CNAME别名从一个新的域名在应用到点,像这样:

http://great.vanityurl.com 

现在,重新部署应用程序,并重新启动服务器,当我访问从应用程序的应用程序后。 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”,但当然这是在轨道3.0.10不可用的(只要我能理解)。

我应该做的请确保应用程序的外观和功能是否通过原始位置(apps.example.com/myRails3App)或虚空网址(great.vanityurl.com)访问?

回答

0

Winfield的答案适用于Rails 3.1,但3.0不喜欢'config.assets.prefix ='。

值得庆幸的是,虽然这不是最终的解决方案,他指出我在“config.action_controller.asset_host正确的方向=”检查了Rails 3.0的API asset_host =后,我发现asset_path =。

最后我把这个在我的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一个符号链接/公众{} APP_ROOT /公关/ myRails3App,允许所有资产来电例如,myRails3App/stylesheets可用于查看用户是否从应用程序目录为r的URL访问equired。

此解决方案感觉脏,但它的工作原理。

谢谢,温菲尔德,帮助我让我的应用程序功能。

2

您可以使用组合:

config.action_controller.asset_host = 'apps.example.com' 
config.assets.prefix = "/myRails3App" 

要直接控制您提到的Rails资产助手生成的URL。