JavaScript включен дважды в приложение на основе ресурсов Rails 3.1 - PullRequest
4 голосов
/ 19 декабря 2011

Хотя название вопроса очень похоже на ряд предыдущих, моя проблема кажется другой.

Вкратце, первый элемент в манифесте js включен дважды.

Вот весь мой /app/assets/javascript/application.js файл в приложении на Rails 3.1:

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require autocomplete-rails
//= require utilities

А вот фрагмент источника отрисованной страницы:

<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/autocomplete-rails.js?body=1" type="text/javascript"></script>
<script src="/assets/utilities.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>

Обратите внимание, что если я перейду наверх, любая другая строка в application.js будет выглядеть примерно так:

//= require utilities
//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require autocomplete-rails

Это всегда первый предмет, который включается дважды!

<script src="/assets/utilities.js?body=1" type="text/javascript"></script>
<script src="/assets/utilities.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/autocomplete-rails.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>

UPDATE

В качестве временного решения я добавил //= require dummy вверху списка, который указывает на пустой файл dummy.js. Хотя он отображается дважды на отображаемой странице, он не имеет никакого эффекта, так как ничего не делает. С другой стороны, если я установлю config.assets.debug = false в development.rb, как часто предлагается, тогда ВСЕ мои javascript будут загружены дважды:

<script src="/assets/application.js" type="text/javascript"></script>
<script src="/assets/application.js" type="text/javascript"></script>

и js-действия запускаются дважды (например, два раза подтверждаются диалоговые окна при удалении модели)

Giuseppe

Ответы [ 3 ]

13 голосов
/ 19 декабря 2011

Я сталкивался с чем-то похожим раньше, и я просто оставил первую ссылку пустой, и это сработало для меня.Попробуйте.

/*leave the following line empty */

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require autocomplete-rails
//= require utilities
3 голосов
/ 11 января 2012

Оказывается, виновником был плагин rails-widgets , в частности этот бит кода , часть инициализации виджетов.

Послеубрав его, все вернулось на круги своя.Активы Javascript теперь загружаются один раз, как и ожидалось, как в процессе разработки, так и в процессе производства.

Хотя я извиняюсь за то, что не узнал раньше, что проблема была довольно специфичной для моей установки, я все же надеюсь, что решение может служить какой-то цели.Спасибо всем.

Джузеппе

1 голос
/ 05 января 2012

Взгляните на это:

Rails 3.1 Активы - странное обслуживание в разработке

Вам также следует убедиться, что вы не скомпилировали свои ресурсы, т. Е. Нет общедоступного каталога / assets. Если есть, удалите его, подпрыгните на своем сервере, и вам будет хорошо.

В конечном итоге оба эти решения не сработали для меня, поэтому я просто установил для config.assets.debug значение false. Я действительно не могу отлаживать свой js таким образом, но, по крайней мере, сейчас это решает проблему.

...