Отключить активацию в производстве Rails
Чтобы отладить javascript в моей производственной среде heroku, мне нужно отключить сжатие активов (или, по крайней мере, сжатие javascript). Я попробовал config.assets.compress = false
вместе с config.assets.debug = true
, и сжатые активы все еще использовались. Затем я удалил сжатые активы, и в этот момент никаких активов не было. Я добавил config.assets.enabled = false
, что не помогло. Я попытался скопировать несжатые активы в разные каталоги, включая корневой, общедоступный и общедоступный/активы приложения (последние два с использованием изображений "папки", "javascripts" и "stylesheets" в папках и помещения их в папки без три подкаталога). В конечном итоге я смог заставить javascripts работать, изменив html, чтобы напрямую ссылаться на все файлы javascript, но CSS и изображения все еще не работают.
Я бы подумал, что мой оригинальный config.assets.compress = false
должен сработать. Любые идеи, что я сделал неправильно?
Ответы
Ответ 1
Я придумал это обходное решение после прочтения документов:
создайте модуль, который ничего не делает для сжатия js/css здесь: lib/modules/no_compression.rb
class NoCompression
def compress(string)
# do nothing
string
end
end
сконфигурируйте свои активы (не) сжатыми с помощью компрессора без обслуживания
config.assets.compress = true
config.assets.js_compressor = NoCompression.new
config.assets.css_compressor = NoCompression.new
Ответ 2
В Rails 4 просто комментирует строку
# config.assets.js_compressor = :uglifier
in config/environments/production.rb
работал у меня. Похоже, что по умолчанию нет никакого сжатия.
Ответ 3
Мне также нужно отлаживать мои js, поэтому я попробовал решение ncherro. Проблема в том, что он все равно бросит
рейк прерван! Неинициализированная константа NoCompression
Поэтому я просто помещаю класс NoCompression в файл production.rb
# Compress JavaScripts and CSS
class NoCompression
def compress(string)
# do nothing
string
end
end
config.assets.compress = true
config.assets.js_compressor = NoCompression.new
config.assets.css_compressor = NoCompression.new
Ответ 4
Также стоит отметить... В дополнение к решению ncherro вам нужно будет сделать следующее:
- Обязательно поместите свой новый модуль где-нибудь, где он будет загружен по умолчанию. Был lib/extras в моем случае.
- запустите
rake assets:clean
для очистки существующих активов.
- запустите
rake assets:precompile
, чтобы скомпилировать ваши ресурсы с помощью нового компрессора.
- перезагрузите приложение... я использую
touch tmp/restart.txt
Счастливая отладка;)
Ответ 5
Прокомментируйте uglifier и добавьте config.assets.debug = true
. Это сработало для меня.
-
Сжатие JavaScripts и CSS:
config.assets.js_compressor = :uglifier
-
Режим отладки отключает конкатенацию и предварительную обработку активов. Но этот параметр может вызвать значительные задержки при представлении рендеринга с большим количеством сложных активов:
config.assets.debug = true
Ответ 6
С Rails 4 на Heroku вам нужно сделать две вещи. Сначала, упомянув @geekQ, закомментируйте строку js_compressor в config/environments/production.rb
# config.assets.js_compressor = :uglifier
Во-вторых, вам нужно рассмотреть кеш конвейера ресурсов Heroku для Rails 4. Любой файл с тем же MD5, что и версия в кеше, не будет перекомпилировать. Будет использоваться предыдущая (возможно, сжатая) версия. Любой файл, который вы редактируете, будет иметь новый MD5 и будет перекомпилирован.
Вы также можете очистить весь кеш ресурсов с помощью плагина Heroku Repo до инструментальной панели Heroku. Установите это, затем используйте команду
heroku repo:purge_cache
Разверните новую версию после очистки кеша, и все ваши активы будут перекомпилированы.
Ответ 7
Мне пришлось обновить Rails.application.config.assets.version
в config/initializers/assets.rb
, чтобы изменения production.rb
вступили в силу.
Ответ 8
Найдите и закомментируйте эту строку в environments/production.rb
:
config.assets.js_compressor = ...
config.assets.css_compressor = ...
Ответ 9
Похоже, это МОЖЕТ быть ошибкой в Rails. Из журнала изменений для предстоящих рельсов 3.2.9 это то, чем вы сталкивались?
Respect config.digest = false для пути к ресурсу
Раньше внутренняя среда asset_path соблюдала только параметр: digest, но игнорировала глобальную конфигурацию. Это означало, что config.digest = false не может использоваться в сочетании с config.compile = false, это исправляет поведение.
http://weblog.rubyonrails.org/2012/10/29/ann-rails-3-2-9-rc1-has-been-released/
Считаете ли вы, что это может быть связано?