在我们的Intranet环境中,我们有一项法令,即应该从Apache root提供公共资产(样式表,图像等),而Rails应用程序从“子目录”(代理到Mongrel集群)运行。换句话说:
<%= stylesheet_tag '/common' %>
# <link href="http://1.1.1.1/stylesheets/common.css" />
<%= link_to 'Home', :controller=>'home', :action=>'index' %>
# <a href="http://1.1.1.1/myapp/" />
我想要做的是在我的配置中定义资产和相对网址,如下所示:
ActionController::Base.asset_host=http://1.1.1.1
ActionController::Base.relative_url_root=/myapp
但是当我这样做时,relative_url_root值会附加到asset_host值。 (例如<link href="http://1.1.1.1/myapp/stylesheets/common.css">
)有没有办法阻止这个?而且,更重要的是,是否有关于如何将rails应用程序部署到这样的环境的最佳实践?
(顺便说一句,我不想简单地对我的资产路径进行硬编码,因为开发环境与测试和生产环境不匹配。)
环境:
Rails 2.3.4
Ruby 1.8.7
RedHat Linux 5.4?
答案 0 :(得分:2)
使用您自己的实现覆盖ActionView :: Helpers :: AssetTagHelper#compute_public_path私有方法。 或做一个像
一样的笑话module ActionView::Helpers::AssetTagHelper
def compute_public_path_with_root_removed *args
compute_public_path_without_root_removed(*args).sub(
ActionController::Base.relative_url_root,
""
)
end
alias_method_chain :compute_public_path, :root_removed
end
您还可以根据开发/生产环境或任何其他方式使此覆盖成为条件