所以我开始研究 Rails3 中的资产管道,我有一个想要的用例,它有点偏离了人迹罕至的道路......所以我正在寻找一个秘诀。
我经常在本地运行 webrick 进行开发,然后为已部署的应用程序实例运行 Passenger+Apache。
该应用程序配置有 suburi 路径,例如 http://server/approot/...
为了使 webrick 路径像部署的实例一样工作,我添加
map '/approot' do run app
到config.ru
. 现在 webrick 也在 http://local:3000/approot/...
混乱
鉴于这种设置,我尝试使用rake assets:precompile
并且在本地、部署之间遇到了很多配置问题——缺少文件、不正确的路径、firebug 中的 404 等。这是我尝试过的一些解决方案:
config.assets.initialize_on_precompile = false
为了application.rb
防止在预编译资产时尝试初始化应用程序production
,(我们有几个已部署的环境并称它们为不同的名称,ug.)。config.assets.precompile += %w( *.js *.css )
application.rb
包括缺少的 jquery.js 和 ujs 和 rails.js 之类的东西。config.assets.prefix = "/approot/assets"
纠正上面的地图(在 config.ru 中)不适用于资产的问题,因此必须将资产预编译为./public/approot/assets
,但我不确定这是否仅适用于本地,即如果我部署,我的资产路径是http:// server/approot/approot/(js|css|...)
吗?
预编译资产时, rake 任务切换到 env production
,但是从 Rails3 文档中不清楚 sprockets 是否继续在本地动态编译并使用这些动态资产,或者它是否会提供静态预编译资产?
- 我尝试
config.serve_static_assets = true
输入environments/development.rb
,但我不确定它如何与config.assets.compress = false
and一起使用config.assets.debug = true
。将 assets.debug 设置为 false 似乎只是在 webrick 日志中隐藏了 GET 请求,尽管我看到一篇帖子说“解决了问题”[原文如此]。
配方要求
所以我想要一个执行以下操作的食谱:
http://server/approot/assets/...
无论是在乘客还是 webrick(即已部署或本地)中运行,资产都可以从路径中一致且正确地提供。如果这不可能,那么我也可以切换我的本地开发环境以使用Passenger+Apache,这没什么大不了的,但我只想知道它是否可能。原始资产
/app/assets
像普通 Rails3 一样存在,但是当我预编译它们时,它们在部署的环境中的工作方式完全相同,因此资产文件引用不会中断(即现在,/assets/image/...
当路径清晰时,有很多 refs 正在寻找设置为/approot/assets/image...
. (从 Rails3 文档中不清楚是否有关于部署到 root 和 suburi 的假设,例如http:// server/assets/...
vs.http:// server/approot/assets/...
)sprockets 不能在已部署的环境中使用(我们的限制,抱歉)。所以这意味着 rails3 应用程序必须看起来像一个静态资产应用程序。我知道这是预编译资产应该做的事情,但是路径问题使我无法像宣传的那样工作。
TL;DR - 我觉得我正在尝试很多单独的东西,如果我知道它们的正确组合,它们可能会起作用。