Rails资产管道,带有路径前缀的子URI部署,image_tag

时间:2012-01-09 16:39:31

标签: ruby-on-rails asset-pipeline

我有一个Rails 3.1应用程序。

我通过乘客将其部署到 SubURI ,而不是URI根目录。例如,app root实际上是http://somewhere.com/application

我的应用中有一个stylesheet.css.erb,使用资产管道,用

设置背景图片
<%= asset_path 'something.gif' %>

但是,当我运行rake assets:precompile时,它会将其预编译为/assets/something.gif,而不是/application/assets/something.gif - 因为当我从命令行运行rake任务时,它不会但是知道路径前缀(“/ application”)在SubURI的Passenger下运行时会有效。

处理此问题的正确方法是什么?有没有办法告诉资产:预编译任务使用特定的路径前缀,因为我们知道什么时候预编译我们实际上要部署到路径前缀?

  • 注意:实际实时应用生成的路径,例如布局中的stylesheet_link_tag 'application' 执行,可以使用路径前缀正确生成。因此资产管道在运行时确实遵循路径前缀。问题显然是当我运行资产:预编译时,它无法知道最终前缀是什么,我正在运行它的方式。我怎么说呢?)

2 个答案:

答案 0 :(得分:1)

之前出现过: 似乎是现在合并到master中的Sprockets的限制: https://github.com/rails/rails/pull/2977

我猜您需要设置RAILS_RELATIVE_URL_ROOT

来源:

答案 1 :(得分:0)

好吧,我想也许我会接受@Tigraine给他的业力,因为他指示我解决方案。

设置RAILS_RELATIVE_URL_ROOT只是,但是在当前发布的 Rails 3.1.3(可能是主版)中 - 它不会做任何事情。你需要实际上猴子补丁Rails添加此功能。

我实际上最终做的是在他指出的一个答案中给出的解决方案的修改版本。我使用alias_method_chain来尽可能少地修补补丁和粘贴:https://gist.github.com/1595405

@Tigraine建议修复大师,我还没有证实这一点。如果是这样,我不知道它预定的导轨版本(下一个3.1.x,3.2,甚至更晚?),或者它将采用什么形式(RAILS_RELATIVE_URL_ROOT)?如果有人知道这些问题的答案,也许将来发布这样的版本时,请添加评论或答案。