ruby-on-rails-3 - 使 Assets 管道像开发中的生产一样

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

我在生产中遇到了一些 Assets 问题:缺少 Assets ,编译到错误文件中的东西(“/admin”的javascript被编译到前端代码等等)。大多数 Assets 来自引擎。我想调试和优化这个。

为此,我需要在我的开发环境中进行预编译、服务和失败,就像在生产环境中一样。

我在我的 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 运行它给我所有的 Assets 和manifest.ymlpublic/ .

但随后服务器失败:
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 未预编译 .但它是!它在那里,在公共(public)目录中,在 manifest.yml ,我可以使用浏览器(或 wget)获取它:http://localhost:3000/assets/favicon.ico .

注意 Favicon 只是调用的第一个 Assets 。如果我去掉 favicon,问题只会出现在下一个 Assets 上,即“all.js”,或者,当它被删除时,“all.css”等等。我可以剥离它直到“footer_bg.png”,然后它会在那里失败。再说一遍:问题不在于网站图标,而在于开发环境根本看不到预编译的 Assets 。

还需要什么才能获得类似于生产的开发 Assets 管道?

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

最佳答案

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

由于静态 Assets 服务,Apache(可能是任何可载客的服务器)。
此外,在 localhost 上,我可以将 apache 在其日志中的详细程度提高到非常高,从而为我提供足够的调试信息。

乘客在生产中尽可能地模拟 ruby​​ 版本和 gem-loading。

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

像在生产环境中一样启动整个堆栈让我能够进行故障排除。这使我得出结论,有几个问题导致了 Assets 问题: gem Assets 没有被提取;权限问题(www-data 无法读取已编译的 Assets )和一些未正确编译的 Assets 。

关于ruby-on-rails-3 - 使 Assets 管道像开发中的生产一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10212171/

相关文章:

css - Grails Assets 管道 @font-face src url

javascript - 在应用程序中包含 Javascript 文件的标准方法?

ruby-on-rails - 尽管有更改,Rails仍使用缓存的application.css

html - Rails - 为什么 HAML 显示完整的哈希值?

jquery - 如何使用 Rails 作为带有 Backbone UI 的纯粹 JSON 应用程序服务器?

mysql - 如何延迟加载或急切加载关联表的总和?

grails - Grails Assets 管道-将MinifyJs设置为true不起作用

javascript - 编译后的文件没有获得指纹轨

javascript - 将 Adob​​e Edge 脚本添加到 Rails Assets 管道

html - 如何使用 link_to 在 Rails 3 上创建没有 href 属性的链接?