我有一个Rails 3.1应用程序。
我是通过客运将其部署到SubURI,而不是将其部署到URI根。例如,应用程序根目录实际上以http://somewhere.com/application的形式访问。
我的应用程序中有一个stylesheet.css.erb,它使用资产管道来设置一个背景图像
<%= asset_path 'something.gif' %>然而,当我运行rake assets:precompile时,它会预编译它到/assets/something.gif,而不是/application/assets/something.gif --因为当我从命令行运行rake任务时,它还不知道路径前缀("/application")在SubURI的乘客下运行时是有效的。
处理这件事的正确方法是什么?有没有方法告诉资产:预编译任务使用特定的路径前缀,因为我们知道在预编译时实际上要部署到路径前缀?
stylesheet_link_tag 'application',使用路径前缀正确生成的do。因此,资产管道在运行时确实尊重路径前缀。问题是,当我运行资产:预编译时,它无法知道最终前缀是什么,也就是我运行它的方式。我该怎么说?)发布于 2012-01-09 17:09:36
这一点以前已经出现过:似乎是链轮中的一个限制,现在它被合并到主模块:https://github.com/rails/rails/pull/2977中。
我想你需要设置RAILS_RELATIVE_URL_ROOT
资料来源:
发布于 2012-01-11 16:16:28
好吧,我想也许我会接受@Tigraine给他因果报应,因为他把我引向了解决方案。
但是,在当前发布的Rails 3.1.3 (它可能在主版中)中,仅仅设置RAILS_RELATIVE_URL_ROOT是不够 --它不会做任何事情。您需要实际猴子补丁Rails来添加此功能。
实际上,我最后做的是在他指出的答案中给出的解决方案的一个修改版本。我使用alias_method_chain尽可能少地复制和粘贴现有的Rails逻辑:https://gist.github.com/1595405
@Tigraine建议大师有个解决办法,我还没有证实这一点。如果是这样的话,我不知道它将发布什么rails (下一个3.1.x,3.2,甚至更晚的版本?),或者它将采取什么样的形式(RAILS_RELATIVE_URL_ROOT)?如果有人知道这些问题的答案,也许在将来发布这样一个版本时,请添加评论或答复。
https://stackoverflow.com/questions/8791862
复制相似问题