【问题标题】:Rails assets loading twice in development; creates strange behaviorRails 资源在开发中加载两次;产生奇怪的行为
【发布时间】:2016-06-11 17:07:49
【问题描述】:

我正在处理 rails app 并看到奇怪的行为,我认为这是由于在开发过程中多次加载 Rails 资产引起的。

我在 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 线程,但还没有找到可行的解决方案。如果其他人可以就这个问题提供任何建议,我将不胜感激!

【问题讨论】:

  • 我唯一一次有 Rails javascript 双重加载,这是因为 public/assets 中有一个已编译(但不是摘要标记)版本的 application.js。如果存在public/assets/application.js,则值得删除它,它可能会解决您的问题。
  • 谢谢@robomc;我没有public/assets 目录:/

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-01-19
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多