Heroku и предварительно скомпилированные активы

У меня есть приложение Rails 4. Один из моих ресурсов javascript использует ruby ​​для получения всех пользователей.

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

Спасибо!

1 ответ

Решение

Компилировать ресурсы локально

Чтобы решить эту сложную проблему с базой данных при развертывании, не вызывайте прекомпиляцию в производственной среде, а прекомпиляцию на машине разработки для производства перед отправкой. Нажав на функциональную кодовую базу, вы можете запускать команды "$heroku db:xxx" на Heroku.

  1. Отключить прекомпиляцию активов в production.rb:
config.assets.compile = false
  1. Прекомпилируйте активы для производства на машине разработки:
$bundle exec rake assets:precompile RAILS_ENV=production
  1. Теперь ваш код будет содержать ваши скомпилированные ресурсы, так что нажимайте.
$heroku push

При развертывании в Heroku вы ищете эту строку:

    -----> Preparing Rails asset pipeline
           Detected manifest.yml, assuming assets were compiled locally
  1. На данный момент вы можете создать свою производственную базу данных на 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

https://devcenter.heroku.com/articles/rails-asset-pipeline

Другие вопросы по тегам