24

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

4 回答 4

13

我在这里回答了这个问题:

Rails 3.2.8 Application.js 和 Application.css 没有按预期工作

正文如下:

我也遇到了这个问题,但使用的是较新版本的 Rails 和 Ruby。

检查日志,我从 Rails 缓存中获得了 javascript.js,因为服务器没有看到文件中的更改。我去移动了 require 行(只有一个),告诉 Rails 文件发生了变化并重新编译/使用。Wellm 为我做到了!

希望它可以帮助某人。

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

我有版本 2.2.1 并且有问题,升级到 2.2.2 后,它工作

gem 'sprockets', '2.2.2' 
于 2013-12-20T20:01:38.307 回答
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 似乎一切正常。

希望这可以帮助可能遇到此问题升级的其他任何人。

于 2014-03-11T18:35:02.780 回答
1

一个常见的原因是资产被编译并在 public/assets 中找到,在这种情况下 Rails 不会重新编译它们。如果您在此处有资产,并且没有将 config.serve_static_assets 设置为 false,那么 Rails 将不会重新编译您的资产:

config.serve_static_assets = false

因此,如果您在 public/assets 中有预编译的东西,要么删除它们,要么将上面的行添加到 development.rb

于 2013-11-01T14:40:02.353 回答
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/

我知道它在文件顶部的注释中说应用程序、lib 或供应商文件夹中的任何文件都将包含在内,但我发现情况并非如此。我无法解释原因,但请参阅此处了解我的来源。试试上面的命令,或者在你的 app/assets 文件夹中包含引导文件。希望有帮助。

于 2013-10-24T05:26:46.297 回答