javascript_include_标记:应用程序在开发环境中加载两次javascript
这很奇怪 我的布局的javascript_include_标记:应用程序在开发环境中加载两次javascript,javascript,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.2,asset-pipeline,Javascript,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.2,Asset Pipeline,这很奇怪 我的布局的标题中的这行代码部分: <%= javascript_include_tag :application %> 我正在使用Rails 3.2.13,这是怎么回事?它没有包含两倍于application.js的内容。application.js中包含的任何内容都将在开发环境中引用,并且在application.js中编写的任何js代码都将添加到最后一次application.js调用中。尝试单击application.js reference,您会注意到这一点 然而
标题中的这行代码
部分:
<%= javascript_include_tag :application %>
我正在使用Rails 3.2.13,这是怎么回事?它没有包含两倍于
application.js的内容。application.js中包含的任何内容都将在开发环境中引用,并且在application.js
中编写的任何js代码都将添加到最后一次application.js
调用中。尝试单击application.js reference,您会注意到这一点
然而在生产环境中;它将只引用将包含所有其他被引用文件的代码的application.js
。运行
bundle exec rake assets:clean
这会清理所有预编译的资产,因为在开发环境中不需要它们(它们是通过资产管道提供的) 以前我的Rails应用程序也有类似的问题。包括线路
config.serve_static_assets = false
在development.rb
文件中解决了这个问题。(根据rubyonrails.org,此配置项在开发中默认为true
,在生产中默认为false
,这就是为什么在生产中没有此问题。)
此设置决定Rails是否应提供public/
目录中的静态断言。在生产环境中,Web服务器将处理此任务,因此设置默认为false
您可能想看看这些帖子:
正如@gertas在这篇文章中所说:
将config.service\u static\u assets=false
添加到development.rb
将阻止从/public/assets
加载文件
最后,您还可以使用
它对Rails应用程序中的配置项提供了全面的解释。application.js没有加载两次,但情况是这样的-
默认情况下,开发环境中的资产不会预编译。
因此,您的application.js将在所有Java脚本的末尾加载。实际上application.js文件包含运行应用程序所需的所有js文件,如果在此之前没有加载任何js文件,则会显示错误
比如说
My application.js文件包含以下内容
//= require jquery
//= require jquery_ujs
//= require foundation
//= require turbolinks
//= require_tree .
这意味着必须先加载所有这些js文件,然后再加载application.js
但在生产环境中,所有的js文件都是在单个application.js文件中预编译的,您在其中只看到一个文件
因此,我建议不要担心这一点。这是rails 3应用程序在开发环境中的正常行为。从公用文件夹中删除资产管道文件夹。默认情况下,它会自动从该区域加载js文件。您是否在开发中运行了rake assets:precompile
?不这样认为,但无论如何,我还是按照您的建议调用了bundle exec rake assets:clean
。@Darmen不知道您是否已经解决了问题。如果没有,您是否尝试将config.service\u static\u assets=false
添加到development.rb
文件中?开发中的application.js
的内容是什么?(严肃的问题,请在这里发布代码)@Paul,也许config.serve\u static\u assets=false
解决了这个问题,因为之前(也回复@Michael)在开发中的application.js
的内容同样是清单中包含的所有Javascript,而现在,总是在开发中,我像以前一样看到了对每个javascript的所有调用,但是application.js
只包括注释行(从“这是一个清单…”到“在下面的..之后”没有javascript代码了。这是正确的行为吗?不管怎样,现在每个javascript实际上只调用了一次。仍在研究,但问题似乎已经解决了!是吗,还指定了开发环境:bundle exec rake assets:clean RAILS_ENV=development Result:/Users/me/.rbenv/versions/1.9.3-p448/bin/ruby/Users/me/.rbenv/versions/1.9.3-p448/bin/rake assets:clean:all RAILS_ENV=development RAILS_GROUPS=assets rm-rf/Users/me/dev/RAILS/myapp/public/assets但没有任何变化我知道,我没有得到你的答案。Application.js工作得很好,问题是,在它之前,而且只有在开发中,每个javascript文件都有一个调用,我不知道为什么!
bundle exec rake assets:clean
config.serve_static_assets = false
//= require jquery
//= require jquery_ujs
//= require foundation
//= require turbolinks
//= require_tree .