Heroku и предварительно скомпилированные активы
У меня есть приложение Rails 4. Один из моих ресурсов javascript использует ruby для получения всех пользователей.
Проблема возникает, когда я пытаюсь загрузить геройку. В нем говорится, что он не может предварительно скомпилировать этот ресурс, потому что база данных еще не существует. Что я могу сделать, кроме удаления этого актива, загрузки в heroku для переноса базы данных и последующего ее возврата?
Спасибо!
1 ответ
Компилировать ресурсы локально
Чтобы решить эту сложную проблему с базой данных при развертывании, не вызывайте прекомпиляцию в производственной среде, а прекомпиляцию на машине разработки для производства перед отправкой. Нажав на функциональную кодовую базу, вы можете запускать команды "$heroku db:xxx" на Heroku.
- Отключить прекомпиляцию активов в production.rb:
config.assets.compile = false
- Прекомпилируйте активы для производства на машине разработки:
$bundle exec rake assets:precompile RAILS_ENV=production
- Теперь ваш код будет содержать ваши скомпилированные ресурсы, так что нажимайте.
$heroku push
При развертывании в Heroku вы ищете эту строку:
-----> Preparing Rails asset pipeline
Detected manifest.yml, assuming assets were compiled locally
- На данный момент вы можете создать свою производственную базу данных на Heroku
$heroku db:migrate
Я думаю, что эти шаги решат вашу проблему. Пожалуйста, дайте мне знать.
Предостережение
После того, как вы отключите прекомпиляцию, вы должны будете всегда помнить о прекомпиляции для производства в вашей системе разработки перед развертыванием в производство.
Компиляция Javascript в конвейер ресурсов
Поскольку вы конкретно говорите о прекомпиляции js, и я не пробовал этого, но кажется, что эти типы прекомпилированных js-специфичных строк также должны быть закомментированы в production.rb, если они у вас есть. В активах есть один и тот же тип директив js. Р.Б., опять же, я не знаю, нужно ли их очистить или нет. (Главное - сделать предварительную компиляцию локального ресурса перед тем, как отправить ее в Heroku.)
# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
# config.assets.precompile += %w( xxxx.js )
Heroku Docs