Ruby on rails Rails资产管道、带有路径前缀的子URI部署、图像标签

Ruby on rails Rails资产管道、带有路径前缀的子URI部署、图像标签,ruby-on-rails,asset-pipeline,Ruby On Rails,Asset Pipeline,我有一个Rails 3.1应用程序 我通过passenger将其部署到子URI,而不是URI根。例如,应用程序根目录实际上是作为访问的 我的应用程序中有一个stylesheet.css.erb,它使用资产管道设置背景图像 <%= asset_path 'something.gif' %> 但是,当我运行rake-assets:precompile时,它会将其预编译为/assets/something.gif,而不是/application/assets/something.gi

我有一个Rails 3.1应用程序

我通过passenger将其部署到子URI,而不是URI根。例如,应用程序根目录实际上是作为访问的

我的应用程序中有一个stylesheet.css.erb,它使用资产管道设置背景图像

<%= asset_path 'something.gif' %>

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

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

  • 注意:路径是由实际的live应用程序生成的,例如布局中的
    stylesheet\u link\u tag'application'
    do使用路径前缀正确生成。因此,资产管道在运行时确实尊重路径前缀。问题很明显,当我运行assets:precompile时,它无法知道最终前缀是什么,也无法知道我运行它的方式。我怎么说呢?)
这一点以前就出现过: 似乎是链轮中的一个限制,现在已合并到主链轮中:

我想您需要设置
RAILS\u RELATIVE\u URL\u ROOT

资料来源:


好吧,我想也许我会接受@Tigraine's给他带来业力,因为他引导我找到了解决办法

仅仅设置RAILS\u RELATIVE\u URL\u ROOT是不够的,但是在当前发布的RAILS 3.1.3中(它可能在master中)——它不会做任何事情。您需要实际使用monkey patch Rails来添加此功能

实际上,我最后所做的是对他所指的一个答案中给出的解决方案的修改版本。我使用alias_method_chain复制和粘贴尽可能少的现有Rails逻辑:


@Tigraine建议大师有一个补丁,我还没有确认。如果是这样,我不知道它将发布什么版本的rails(下一个版本是3.1.x,3.2,甚至更高版本?),或者它将采取什么形式(rails\u RELATIVE\u URL\u ROOT)?如果有人知道这些问题的答案,也许在将来发布此类版本时,请添加评论或答案

嗯,但这在3.1版本中不起作用,我需要在未发布的版本中运行轨道/链轮?呸。它是否包含在3.2中,或者甚至不包含在3.2中?我接受了你的答案,给你业力,因为你的链接引导我找到了解决方案,尽管这个答案并不完整或完全准确。请参阅我对这个问题的自我回答