2012-01-09 100 views
2

我有一个Rails 3.1应用程序。Rails资产管道,带路径前缀的子URI部署,image_tag

我通过乘客将其部署到SubURI,而不是URI根目录。例如,应用程序根目录实际上被访问为http://somewhere.com/application

我有一个stylesheet.css.erb在使用资产管线我的应用程序,与

<%= asset_path 'something.gif' %> 

设置一个背景图像。然而,当我运行rake assets:precompile,它预编译这/assets/something.gif,不/application/assets/something.gif - - 因为当我从命令行运行rake任务时,它还不知道在SubURI下的Passenger下运行的路径前缀(“/ application”)。

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

  • 注:Path的由实际生活的应用程序产生的,例如stylesheet_link_tag 'application'布局,与路径前缀正确生成。因此,资产管道在操作时确实遵守路径前缀。问题很明显,当我运行资产:预编译时,它无法知道最终的前缀将会是什么,这是我运行它的方式。我该如何告诉它)

回答

1

这已经到来之前: 似乎是在链轮一个限制,即现在合并到主: https://github.com/rails/rails/pull/2977

我猜你需要设置RAILS_RELATIVE_URL_ROOT

来源:

+0

呵呵,但是这在3.1版本中不起作用,我需要从未发布的版本运行rails/sprockets?呸。它是包含在3.2中,还是甚至不在3.2中? – jrochkind 2012-01-09 18:09:16

+0

我接受了你的答案给你的业力,因为你的链接让我找到解决方案,虽然这个答案不完全或完全准确。在http://stackoverflow.com/a/8822692/307106上看到我对这个问题的自我回答。 – jrochkind 2012-01-11 16:18:16

+0

适用于Rails 3.2 – 2012-04-27 05:53:04

0

好吧,我想也许我会接受@ Tigraine's给他业力,因为他指引我解决问题。

只设置RAILS_RELATIVE_URL_ROOT是然而,在当前没有足够的发布Rails的 3.1.3(这可能是在主站) - 它不会做任何事情。您需要实际上使用补丁Rails来添加此功能。

我最终做的是在他指出的其中一个答案中给出的解决方案的修改版本。我使用alias_method_chain以尽可能少的现有Rails逻辑来修补复制和粘贴:https://gist.github.com/1595405

@Tigraine表示在主服务器中存在修复,我没有证实这一点。如果是这样,我不知道它定义了什么版本的rails(下一个3.1.x,3.2,甚至更晚?),或者确切地说它需要什么形式(RAILS_RELATIVE_URL_ROOT)?如果有人知道这些问题的答案,可能在将来发布这样的版本时,请添加评论或答案。