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.js
和knockout
,但是,这些文件不在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.js
和plugin.js
显式添加到config.assets.precompile
并生成public/assets
中的文件。我仍然不知道为什么它会生成除这些之外的所有其他 JS 文件。
【讨论】:
请接受您自己的答案。您需要这样做,因为即使 Rails 编译了这些文件,除非您将它们添加到您的precompile
数组中,否则它们将与链轮一起使用,即在您的 application.js
中。你可以检查application.js
确实在加载它。
他们也不在application.js
!我查看了文件并搜索了knockout.js
和plugin.js
顶部的评论。所有其他文件都在application.js
中,但不是那两个。比如javascripts
目录下有一个books.js
,在public/assets
下编译成自己的文件,在manifest.yml
下也有,在application.js
下也有,但是对于一些原因,knockout.js
和 plugin.js
没有编译为文件,甚至没有编译为 application.js
。 knockout.js
中的最高评论是 // Knockout JavaScript library v3.1.0
。以上是关于Rails 不会编译资产,但会在日志中显示编译,rake assets:precompile not generate files的主要内容,如果未能解决你的问题,请参考以下文章
带有 Puma 和 Nginx 服务页面的 Elastic Beanstalk 上预编译资产的 Rails 4 应用程序以及旧资产链接