Запрет Heroku использовать предварительно скомпилированные ресурсы в режиме разработки

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

Это отлично подходит для производственных серверов, однако для моего сервера "RAILS_ENV=development" это вызывает проблемы, так как теперь я получаю страницы со всеми файлами JavaScript, обслуживаемыми по отдельности, из моего манифеста активов, а затем еще один файл с тем же кодом, сгруппированный в качестве предварительно скомпилированного актива.

Это приводит к тому, что мои библиотеки jquery datatables ломаются и выдают всплывающие ошибки, которые я не получаю ни в своей локальной среде (разработка или производство), ни в моем производственном экземпляре Heroku.

Есть ли возможность отключить предварительную компиляцию ресурсов в Heroku для экземпляров режима разработки? Или есть причина, по которой они еще не отключены на серверах разработки Heroku?

3 ответа

Решение

Если Heroku обнаружит файл public/assets/manifest.yml, они не будут пытаться предварительно скомпилировать ваши ресурсы и предположить, что вы имеете дело с ними самостоятельно. Более подробная информация на http://devcenter.heroku.com/articles/rails31_heroku_cedar

AFAIK, Heroku должен предварительно скомпилировать ресурсы, чтобы обойти их только для чтения FS и тот факт, что конвейер ресурсов Rails хочет записывать файлы в FS. Единственное, что я могу предложить, это выяснить, почему ваши ресурсы ломаются при компиляции.

Я решил эту проблему, добавив в мой Rakefile немного вуду, чтобы отключить задачу rake для прекомпиляции.

сначала я добавляю компонент user-env-compile labs

heroku labs:enable user-env-compile

затем добавьте это в начало моего Rakefile

# found from http://blog.jayfields.com/2008/02/rake-task-overwriting.html
# used by conditional heroku asset compile magick
class Rake::Task
  def overwrite(&block)
    @actions.clear
    enhance(&block)
  end
end

Затем я добавляю это грабельное задание в lib/tasks/disable_assets_on_heroku.rake

if ENV['RAILS_ENV'] == 'development'
  namespace :assets do
    task(:precompile).overwrite do
      puts "Asset precompile skipped in #{ENV['RAILS_ENV']}"
    end
  end
end
Другие вопросы по тегам