Rails 4资产预编译

12

这是一个常见的问题,但是没有任何解决方案可以解决我的问题,所以我来提问:

我正在将ace.js添加到我的rails4应用程序中,我所做的是:

- Added vendor/assets/ace/ace.js
- Created vendor/assets/ace/index.js , with content
  //= require ace  
- Added the following to my production.rb
  config.assets.precompile += %w( index.js )  
  config.assets.paths << Rails.root.join("vendor", "assets", "ace")

所以在我的布局文件中,我有:

<%= javascript_include_tag "ace" %>

在开发阶段它完美运行,但当我运行以下命令时出现问题:

RAILS_ENV=production bundle exec rake assets:precompile

它不会创建ACE文件的摘要版本。

我有什么遗漏吗?

2个回答

22

这可以通过添加以下内容来解决:

config.assets.precompile += %w( index.js )

config/application.rb。(不是config/environments/production.rb

在Rails 4.0 beta1中测试过。


4
谢谢,这对我很有帮助。这是Rails 4的变化吗?以前似乎在production.rb中设置,但文档并没有清楚地指出现在应该在application.rb中设置。 - cman77
1
有没有一种方法可以在不指定每个单独文件的情况下完成这个操作? - ahnbizcad
1
@ahnbizcad 这个 可能 有效:config.assets.precompile += [/(^[^_\/]|\/[^_])[^\/]*$/] - dhulihan

2

如果您将ace目录作为资源添加,应将js文件放置在vendor/assets/ace/javascripts目录下(需要创建该目录)。

通常情况下,您不需要config.assets.precompile += %w( index.js ),Sprockets会很好地处理它。如果只有一个js文件需要从vendors/assets/ace目录添加,则不需要在那里添加index.js。如果在vendor/assets/ace/javascripts/your_vendor_js_library下有许多子目录和文件,则index.js是适当的。最后一步:您不需要<%= javascript_include_tag "ace" %>,它会重复<%= javascript_include_tag "application" %>的内容。


那么,当我进行预编译时,它会创建一个 application-xxx.js 和 ace-xxx.js 文件吗? - Arthur Neves
我认为这个文件只会有一个 - application-xxx.css。这就是预编译资源的原因。 - R Milushev
将资产合并到一个优化文件中的想法是为了减少服务器请求。那么拆分资产的原因是什么?有关该理论的良好参考 - R Milushev
3
我需要将它们剔除,因为ace.js太大了,只会在10%的屏幕上使用。 - Arthur Neves
您可以根据控制器按需加载资产,如果适用于您的情况。 - R Milushev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接