Rails资产管道不包括application.js清单中的必需文件

时间:2013-03-10 22:37:25

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

rails资产管道不包括application.js。

中所需的文件

呈现给浏览器的唯一javascript文件是application.js,并且require行不会被编译为包含标记,因为它们应该是:

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require bootstrap
//= require_tree .

;
在config / application.rb中

我有config.assets.enable = true

我正在使用rails 3.2.8,我尝试使用rvm安装ruby 1.9.3-p398和2.0.0-p0。

如何让application.js包含所需的文件?

编辑:看起来这个问题的锁最近解锁了,活动也增加了。自从我研究这个问题已经有一段时间了,代码不再存在了。如果我没记错,我重新安装了ruby和rails,这解决了问题。

我应该关闭这个问题吗?在这种情况下,正确的程序是什么?

4 个答案:

答案 0 :(得分:13)

我在这里回答:

Rails 3.2.8 Application.js and Application.css are not working as expcted

以下是文字:

  

我也遇到过这个问题,但是有了更新版本的Rails和   红宝石。

     

检查日志,我正在从Rails缓存中获得javascript.js   因为服务器没有看到文件中的更改。我去了,感动了   需要线路(只有一个)来告诉Rails有变化   该文件并重新编译/使用。 Wellm为我做了!

     

希望它对某人有帮助。

另一项重要发现是升级Gemfile中的sprockets gem。

我有2.2.1版本并且在升级到2.2.2后出现问题

gem 'sprockets', '2.2.2' 

答案 1 :(得分:3)

如果您要从3.0.x - 3.1.x升级并运行到此问题升级到3.2.x,它可能会解决此问题。

我最近从3.0 - 3.1.12升级了一个应用程序,发现资产清单无法使用Ruby 1.9.3,Ruby 2.0或Ruby 2.1.1。然后我继续升级到3.2.17,一切似乎都在使用Ruby 2.1.1正常工作。

希望这有助于其他可能遇到此问题升级的人。

答案 2 :(得分:1)

这样做的一个常见原因是资产是在公共/资产中编译和找到的,在这种情况下,Rails不会重新编译它们。如果你在这里有资产,并且没有将config.serve_static_assets设置为false,那么Rails将不会重新编译你的资产:

config.serve_static_assets = false

因此,如果你在公共/资产中有预编译的东西,要么删除它们,要么将上面的行添加到development.rb

答案 3 :(得分:0)

您是否将引导程序文件复制/粘贴到vendor / assets文件夹或app / assets中?资产管道默认只包含app / assets文件夹,而不包括lib / assets或vendor / assets。要在管道中包含供应商/资产,请在app / assets / javascript / application.js文件中输入此命令:

//= require_tree ../../../vendor/assets/javascripts/

为CSS文件执行相同的操作:

*= require_tree ../../../vendor/assets/stylesheets/

我知道它在文件顶部的注释中说app,lib或vendor文件夹中的任何文件都将包含在内,但我发现情况并非如此。我无法解释原因,但请参阅here了解我的来源。尝试上述命令,或在app / assets文件夹中包含bootstrap文件。希望有所帮助。