Rails 3.1 Assets - странное служение в разработке - PullRequest
36 голосов
/ 02 декабря 2011

У меня проблема с конвейером ресурсов Rails 3.1.Ресурсы включаются в разработку дважды:

<script src="/assets/main_new.js?body=1" type="text/javascript"></script>
<script src="/assets/pagenav.js?body=1" type="text/javascript"></script>
<script src="/assets/tours.controller.js?body=1" type="text/javascript"></script>
<script src="/assets/tours.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>

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

Все хорошо с предварительно скомпилированными активами в производстве.

development.rb

 config.assets.compress = false
 config.assets.debug = true

production.rb

# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false

# Compress both stylesheets and JavaScripts
config.assets.compress = true
config.assets.js_compressor  = :uglifier
config.assets.css_compressor = :scss

config.assets.compile = false
config.assets.digest = true

application.rb

config.assets.enabled = true

Ответы [ 5 ]

39 голосов
/ 03 декабря 2011

Попробуйте добавить в файл development.rb следующее:

config.serve_static_assets = false

... и затем очистите кэш браузера ( обновление на основе комментариев )

Статическийактивы - это предварительно скомпилированные активы в public / assets, куда их помещает rake assets:precompile.

В действительности все, что существует в public / assets, переопределит что-либо в приложении / assets, если вы их обслуживаете.Итак, public / assets / application.js загружается, когда тег js намеревается идентифицировать app / assets / application.js.

12 голосов
/ 03 июля 2012

Как только вы избавитесь от / public / assets, вы также должны очистить кеш браузера.

8 голосов
/ 06 июля 2012

Это просто вызвало у меня проблему. Установка следующего заставляет приложение работать, но включает один файл application.js - который я не хочу в разработке:

config.serve_static_assets = false

Я предварительно скомпилировал свои активы ранее (кажется, причина).

Чтобы исправить это, я сделал следующее:

  • Удалить каталог public / assets, добавленный предыдущей прекомпиляцией.
  • Выполнить RAILS_ENV=development rake assets:clean, чтобы очистить tmp / assets
  • Отредактированное приложение / assets / application.js

Только после того, как я отредактировал application.js, он допустил ошибку, а затем исправил ее, что applciation.js, включенный в страницы, не был полным, предварительно скомпилированным application.js.

Я не уверен, что все это нужно сделать. Я также перезапускал свой сервер по пути.

4 голосов
/ 17 апреля 2013

Это вас (еще раз) споткнуло, - не забудьте добавить BLANK LINE после всех ваших //= require директив в конце вашего application.js!

0 голосов
/ 08 февраля 2015

Я добавляю ту же проблему с меньшим количеством файлов.

Здесь из документации :

В режиме разработки активы подаются в виде отдельных файлов в порядке они указаны в файле манифеста.

Моим решением было удалить строку *= require_tree . из application.css.less и использовать только @import "my-styles"; из меньшего.

Может быть, вы можете найти подобное решение с помощью JavaScript ...

...