Rails 不会编译资产,但会在日志中显示编译,rake assets:precompile not generate files

Posted

技术标签:

【中文标题】Rails 不会编译资产,但会在日志中显示编译,rake assets:precompile not generate files【英文标题】:Rails won't compile assets, but shows the compile in the log, rake assets:precompile not generating files 【发布时间】:2014-06-28 22:30:01 【问题描述】:

当我运行rake assets:precompile 时,它在日志中显示它编译了plugin.jsknockout,但是,这些文件不在public/assets 中。怎么了?

application.js

//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require ckeditor/init
//= require_tree .

搜索文件:

[vagrant@localhost BK-Development]$ find public/assets -name plugin.js
[vagrant@localhost BK-Development]$ find public/assets -name knock\*

[vagrant@localhost BK-Development]$ grep plugin.js log/production.log
Compiled ckeditor/plugins/youtube/plugin.js  (0ms)  (pid 32556)
Compiled ckeditor/plugins/youtube/plugin.js  (0ms)  (pid 32556)
[vagrant@localhost BK-Development]$ grep knockout log/production.log
Compiled knockout-3.1.0.js  (0ms)  (pid 32556)
Compiled knockout-3.1.0.js  (0ms)  (pid 32556)

[vagrant@localhost BK-Development]$ grep plugin.js public/assets/manifest.yml
[vagrant@localhost BK-Development]$ grep knockout public/assets/manifest.yml
[vagrant@localhost BK-Development]$

这些在我的production.rb 中。应该不相关。

config.serve_static_assets = true
config.assets.compress = true
config.assets.compile = true
config.assets.digest = true
config.assets.precompile += %w( bootstrap.modal.js bootstrap.modal.css application/_helper_classes.css 
bootstrap-datepicker.js bootstrap-datepicker.css books_admin.js categories.js posts.js )

Rails 3.2.14

【问题讨论】:

你是用rake assets:precompile RAILS_ENV=production运行的吗? 是的。它会自动添加:$ rake assets:precompile/usr/local/rvm/rubies/ruby-2.0.0-p247/bin/ruby /usr/local/rvm/gems/ruby-2.0.0-p247@bk_development/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets 【参考方案1】:

我将knockout-3.1.0.jsplugin.js 显式添加到config.assets.precompile 并生成public/assets 中的文件。我仍然不知道为什么它会生成除这些之外的所有其他 JS 文件。

【讨论】:

请接受您自己的答案。您需要这样做,因为即使 Rails 编译了这些文件,除非您将它们添加到您的 precompile 数组中,否则它们将与链轮一起使用,即在您的 application.js 中。你可以检查application.js 确实在加载它。 他们也不在application.js!我查看了文件并搜索了knockout.jsplugin.js 顶部的评论。所有其他文件都在application.js 中,但不是那两个。比如javascripts目录下有一个books.js,在public/assets下编译成自己的文件,在manifest.yml下也有,在application.js下也有,但是对于一些原因,knockout.jsplugin.js 没有编译为文件,甚至没有编译为 application.jsknockout.js 中的最高评论是 // Knockout JavaScript library v3.1.0

以上是关于Rails 不会编译资产,但会在日志中显示编译,rake assets:precompile not generate files的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 Heroku 资产:预编译失败

带有 Puma 和 Nginx 服务页面的 Elastic Beanstalk 上预编译资产的 Rails 4 应用程序以及旧资产链接

Rails:预编译资产缺少节点模块

未使用 Rails 测试环境中的预编译资产

即使资产没有变化,也会发生 Rails 资产预编译

Rails 预编译供应商/资产