Подтвердить что ты не робот

Могу ли я обновить один исходный файл на Heroku без повторной компиляции пули?

Я работаю над проектом рельсов, который размещается на Heroku. Мне интересно, возможно ли обновить один файл без перезапуска приложения.

Почему. У меня есть ошибка, но я не могу ее отследить. Он отлично работает на моей локальной системе, но, похоже, он останавливается в середине процесса обработки на героку.

Поскольку нет точек останова, я обновляю статус обновления в коде. (для последующего удаления) Но добавление одной строки кода в приложение rails похоже на пятиминутный процесс.

  • изменить файл
  • сценический файл на git
  • файл фиксации
  • push git (все вышеперечисленное довольно быстро)
  • подождите, пока Heroku вытащит приложение, сделайте то, что похоже на установку gem, или, по крайней мере, обновление gem.
  • измените несколько файлов, чтобы отразить локальный URL
  • снова запустите службу.

Есть ли способ нажать git, не запуская все эти другие вещи? Возможно, специальный параметр для добавления к push?



Еще одна досада заключается в том, что у моего git теперь есть куча проверок, которые я не хочу видеть мои коллеги. Я нацелен на свой собственный непроизводственный экземпляр heroku (только для тестирования), и нет причин включать все эти попытки в глобальный элемент управления источником.
4b9b3361

Ответ 1

Есть веская причина, почему это невозможно. Когда вы нажимаете на Heroku, они производят "slug" вашего приложения (https://devcenter.heroku.com/articles/slug-compiler). Чтобы обеспечить массивную масштабируемость, которую Heroku предоставляет, этот пул читается только для того, чтобы его можно было развернуть на нескольких динамиках, которые могут быть распределены между различными физическими машинами. Каждый из этих динамиков запускает отдельный экземпляр вашего приложения, в то время как сетка маршрутизации гарантирует, что запросы к вашему приложению перейдут на правильные диноды.

Теперь рассмотрим, что произойдет, если любой из этих экземпляров будет доступен для записи, если вы используете 5 динамиков, у вас будет ваше приложение, работающее на 5 отдельных экземплярах - если файл написан, как он затем распределяется между вашими работающими динамиками? Да, Heroku мог рассмотреть какую-то общую файловую систему для запуска приложений, но это сложно. Только для чтения файловой системы (https://devcenter.heroku.com/articles/read-only-filesystem) эта проблема устранена.

Если вы создали приложение и развернули его в Heroku, но забыли использовать хранилище типа S3, то ваше приложение позволит вам загружать файлы на него (через Paperclip, например, в мире Ruby), но этот загруженный актив будет существовать только на динамик, который его получил, а затем будет потерян при развертывании нового кода или перезапуске приложения, когда dyno получит последний код из пули.

Если вы отлаживаете игру против Heroku, не забывайте, что у вас есть обычный арсенал git, git commit --amend. Альтернативно, работайте в ветке и развертывайте ее непосредственно в Heroku (git push heroku <yourbranchname>:master), а затем, когда вы изолируете проблему rebase (http://git-scm.com/book/en/Git-Branching-Rebasing), ваша ветка на мастер-раздачу любые коммиты вам больше не нужны.

Ответ 2

Проблема XY

Это классическая проблема XY. X - ваш нерабочий код; Y - это поиск несуществующей ошибки Git.

Как Git Работает

Git совершает фундаментальную работу на уровне дерева, а не на уровне файла. Как грубое чрезмерное упрощение, фиксация указывает на дерево, которое указывает на набор файлов. Когда вы нажимаете фиксацию, вам нужно нажать все объекты, связанные с этим фиксацией, если объекты уже не существуют на ресивере.

Как работает Heroku

Heroku компилирует приложение в репозиторий Git в пул. В то время как вы можете игнорировать определенные файлы во время компиляции, вы не можете избежать компиляции пули. Это так, как работает платформа.

Это не проблема, если у вас разумный размер слизи; мои приложения Heroku занимают всего пару секунд, чтобы скомпилировать. Если ваши слизняки очень большие, и поэтому требуется много времени для компиляции (вы утверждаете, что это занимает у вас 5 + минут), тогда у вас есть еще одна проблема XY на руках, если вы пытаетесь решить проблему "не компилировать".

Отладка на Heroku

Heroku имеет множество функций и дополнений, которые помогают отлаживать. Вот короткий список, чтобы вы начали.

См. также

Ответ 3

Это невозможно. Способ, которым герой настраивается, каждый раз, когда вы нажимаете на изменение, сервер перезагружается.

Ответ 4

Да, вы можете.

Сначала перечислите все файлы, которые были изменены с момента последнего коммита.

git status

Добавьте файлы, которые вы хотите зафиксировать индивидуально.

git add location/file_name.rb git add location/file_name2.rb ...

Сделайте фиксацию файлов, которые вы добавили, чтобы нажать.

git commit -m "committing files one at a time or two at a time"

Теперь нажмите

git push heroku