Как избежать обработки скомпилированных активов в режиме разработки? - PullRequest
52 голосов
/ 04 ноября 2011

Я предпочитаю , а не , чтобы объединять файлы JavaScript в режиме разработки, но использовать их как отдельные файлы. Итак, я настроил:

development.rb:

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

В моем каталоге / app / assets / javascript у меня есть:

  • reviews.js
  • отзывы /
    • foo.js
    • bar.js

reviews.js:

//= require jquery
//= require jquery_ujs
//= require_tree ./reviews

Я включаю JavaScript, используя <%= javascript_include_tag "reviews" %> в моем макете. Сгенерированная страница правильно ссылается на три сценария по отдельности, а reviews.js практически пуст. Пока все хорошо.

Теперь, когда я прекомпилирую свои ресурсы для работы с использованием rake assets:precompile, три файла JavaScript объединяются в reviews.js. Это все хорошо для производства, но теперь, в режиме разработки , объединенный reviews.js подается в дополнение к двум отдельным файлам.

Конечно, это приводит к всевозможным неприятным ошибкам при разработке, потому что теперь содержимое foo.js и bar.js обслуживается дважды, один из них в потенциально более старой версии в reviews.js.

Как я могу убедиться, что Rails не использует предварительно скомпилированные ресурсы в режиме разработки?

Ответы [ 4 ]

80 голосов
/ 21 июля 2012

В config/environments/development.rb набор:

config.assets.prefix = "/assets_dev"

так, чтобы в режиме разработки Rails смотрел там (но ничего не нашел, так как вы не будете компилировать ресурсы в разработке (это действительно то, что вы пытаетесь делать - не компилировать ресурсы) ).

При прекомпиляции для production используйте

RAILS_ENV=production rake assets:precompile

, поэтому он компилируется в папку ресурсов по умолчанию, public/assets.

53 голосов
/ 04 ноября 2011

Звучит так, как будто вы прекомпилируете локально.Поскольку файлы существуют в ожидаемом месте, они обслуживаются вашим сервером разработки, и запросы не направляются в Sprockets.

Единственный способ остановить это - удалить скомпилированные файлы.

Обычно вам не нужно компилировать локально.Ожидается, что почти во всех случаях задача прекомпиляции будет выполняться во время развертывания приложения.Рецепт Capistrano для этого есть на странице руководства конвейера активов.

Если вам нужно, чтобы эти файлы были локально зафиксированы в вашем репо, вы можете использовать ветку, чтобы избежать проблемы.Зарезервируйте свою основную ветку для производственного кода и создайте вторую ветку для dev.Только скомпилируйте и передайте активы на master.Когда вы переключитесь на dev, они исчезнут.При необходимости добавьте dev в master.

Edit: убедитесь, что вы принудительно обновляете свой браузер (control + F5), или вы можете найти старые ресурсы, используемые в кэше браузера!

17 голосов
/ 07 октября 2012

в config/environments/development.rb установлено:

config.serve_static_assets = false

и никакие файлы из /public не будут обслуживаться

1 голос
/ 05 ноября 2011

Я попробовал это, и это сработало. rake assets:precompile RAILS_ENV=production

Я заметил, что новая версия конвейера ресурсов делает это, когда вы запускаете rake assets:precompile делает rake assets:precompile:all

...