【发布时间】:2012-11-01 17:08:17
【问题描述】:
所以我开始研究 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初始化应用程序(我们有几个部署的环境并称它们不同的名称,例如)。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和config.assets.debug = true一起使用。将 assets.debug 设置为 false 似乎只是在 webrick 日志中隐藏了 GET 请求,尽管我看到一个帖子说“解决了问题”[原文如此]。
配方要求
所以我想要一个具有以下功能的食谱:
资产始终从路径正确地提供
http://server/approot/assets/...无论是在乘客还是 webrick 中运行(即部署或本地)。如果这不可行,那么我可以将本地开发环境也切换为使用Passenger+Apache,这不是什么大问题,但我只是想知道是否可行。原始资源像普通 Rails3 一样存在于
/app/assets中,但是当我预编译它们时,它们在部署的环境中的工作方式完全相同,因此 资源文件引用不会中断(即现在,当路径明确设置为/approot/assets/image...时,有很多参考文献正在寻找/assets/image/...。(从Rails3 文档中不清楚是否有关于部署到root 和suburi 的假设,例如http:// server/assets/...vs .http:// server/approot/assets/...)链轮不能在部署环境中使用(我们的限制,抱歉)。所以这意味着 rails3 应用程序必须看起来像一个静态资产应用程序。我知道这是预编译资产应该做的事情,但路径问题使我无法像宣传的那样工作。
TL;DR - 我觉得我正在尝试很多单独的东西,如果我知道它们的正确组合,它们可能会起作用。
参考文献
【问题讨论】:
-
如果您使用 Sprockets 提前编译资产,您需要 Sprockets 稍后再次读取清单;这一切都流经Sprockets::Helpers::RailsHelper。如果您不能在生产中使用 Sprocket(“我们的限制,抱歉”),您也应该在开发中将其删除。
-
是的,我对它的了解越多以及这些部分如何组合在一起,我就越有这种印象。谢谢!我们在如何设置我们的应用程序方面没有很大的灵活性——另一个团队在部署的环境中管理 Apache 和 Passenger,但在 rails 应用程序中使用 sprocket 可能没问题。
标签: ruby-on-rails ruby-on-rails-3.2 asset-pipeline