使资产管道像开发中的生产一样

时间:2012-04-18 14:59:34

标签: ruby-on-rails-3 asset-pipeline

我遇到了生产上的资产的一些问题:缺少的,编译成错误文件的东西(javascript为“/ admin”编译成前端代码等等)。大部分资产来自发动机。我想调试和优化它。

为此,我需要在开发环境上预编译,提供服务和失败,就像在生产上完成一样。

我在config/development.rb添加了一些行:

  config.serve_static_assets = true
  config.assets.precompile += %w( store/all.js store/all.css admin/all.js admin/all.css ) # @TODO: clean up, and optimize.
  config.assets.compile = false

使用rake RAILS_GROUPS=assets RAILS_ENV=development assets:precompile运行此操作会为我提供所有资产以及manifest.yml中的public/

但是服务器失败了:

Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Spree/home#index

Showing /xxxx/app/views/spree/shared/_head.html.erb where line #13 raised:

favicon.ico isn't precompiled

favicon.ico未预编译。但它是!它在公共目录中manifest.yml,我可以使用浏览器(或wget)获取它:http://localhost:3000/assets/favicon.ico

注意 Favicon只是第一个被称为资产的资产。如果我删除了favicon,问题只是表示下一个资产,即“all.js”,或者当它被剥离时,“all.css”,依此类推。我可以剥离它直到“footer_bg.png”,然后它就会失败。再说一次:问题不是favicon,而是开发环境根本看不到预编译资产的事实。

要获得与生产类似的开发资产管道还需要什么?

编辑:更明确的解释,图标不是问题,只是一种症状。

3 个答案:

答案 0 :(得分:2)

我最终在localhost上安装了一个apache,乘客进行故障排除。

由于静态资产服务,Apache(可能是任何可乘客的服务器)。 此外,在localhost上,我可以将日志中的apache的详细程度提高到很高,为我提供了足够的调试信息。

乘客在制作时尽可能多地模仿ruby版本和宝石加载。

在webrick上运行的情况太不一样了,即使在尽可能接近仿真的情况下运行也是如此,事实证明它与生产堆栈的区别太大了;这就是为什么我无法在那里重现生产问题,

将整个堆栈分解为生产,这样我就可以排除故障。这让我得出结论,几个问题导致资产困境:宝石资产没有被拿起;权限问题(编译资产不能被www-data读取)和一些资产未正确编译。

答案 1 :(得分:0)

我想您可能希望将favicon.ico留在public ...

alzabo0:~ $ rails --version
Rails 3.2.3
alzabo0:~ $ rails new ojoijoijo
[...]
      create  public/404.html
      create  public/422.html
      create  public/500.html
      create  public/favicon.ico
      create  public/index.html
      create  public/robots.txt
[...]

答案 2 :(得分:0)

只是一个猜测,但尝试添加到您的预编译列表:

config.assets.precompile += %w( store/all.js store/all.css admin/all.js admin/all.css favicon.ico)