Rails资产在开发中加载两次;造成奇怪的行为

时间:2016-02-28 18:16:09

标签: javascript jquery ruby-on-rails ruby caching

我正在研究rails app并且看到奇怪的行为,我认为这是由铁路资产在开发中多次加载造成的。

我在Chrome中工作,并标记了Developer Tools -> Network -> "disable cache"复选框,这使得js和css资产只加载一次,并使所有内容按预期/期望工作。

但是,当我取消选中"disable cache"框时,资产开始多次加载,并打出一次中断,抛出:Uncaught TypeError: $(...).typeahead is not a function

重现的步骤:

git clone https://github.com/duhaime/chalkboard.git
cd chalkboard
rake sunspot:solr:start
rake db:drop db:create db:migrate db:seed
rake sunspot:solr:reindex
rails s
# visit localhost:3000 and enable/disable cache (then refresh) in Chrome

我相信可以通过禁用Rails中的缓存(而不是浏览器客户端)来解决此错误,但我想问一下是否有正确的方法来解决这种情况而不禁用缓存。我已经阅读了这个问题上的许多其他SO线程,但还没有找到可行的解决方案。我非常感谢其他人可以就这个问题提出的建议!

1 个答案:

答案 0 :(得分:0)

typeahead失败的原因是我通过app/assets/javascripts/application.js文件导入它:

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require twitter/typeahead
//= require_tree .

我正在使用<%= javascript_include_tag 'typeahead' %>。更糟糕的是,typeahead包括调用导入typeahead.bundle.js版本0.11.1,并且我安装了gem twitter-bootstrap-rails版本0.10.5。

我删除了所有<%= javascript_include_tag '{package}' %>,从typeahead.bundle.js目录中删除了/assets文件,$(...).typeahead is not a function错误消失了。我会在这里留下这个问题,万一它会帮助别人。