Перекомпілюйте слизьку Heroku без змін push або конфігурації


147

Мені цікаво, чи є спосіб змусити Heroku перекомпілювати слиз без натискання нових комітетів та / або оновлення конфігураційних змінних.

Чому я хотів би це зробити ?:

Я використовую стек Cedar на Heroku для додатка Rails 3.2, і у мене виникають проблеми з rake assets:precompileвідмовою від завдання (лише під час компіляції --- пізніше це працює добре з a heroku run). Я дуже підозрюю, що це пов'язано з тим, що певні змінні середовища не є доступними під час збирання слизу, і я думаю, що heroku labs:enable user_env_compileекспериментальна функція вирішить це.

Однак із user_env_compileувімкненою функцією зміни конфігурації не запускають рекомпіляцію слизи, і мій код не змінився, тому у мене немає ніяких нових зобов’язань.

Звичайно, я міг би підштовхнути "манекен" на посту з тривіальною зміною, що, мабуть, найпростіша відповідь --- але мені цікаво, чи є команда heroku, яка дозволить мені безпосередньо перекомпілювати слима.

Дякую!


1
Нічого в heroku CLI-клієнта?
Метт Бал

Не пряма відповідь, але завжди розумно задокументувати зміни залежності, як-от покладаючись на функції SAAS і т. Д. Моя порада - додати запис до CHANGELOG десь згадуючи, що ви тепер покладаєтесь на цю функцію, і натисніть цю зміну, щоб викликати відновлення слимак.
patcoll

Відповіді:


93

Компіляція Slug викликається гаком попереднього отримання гачка, тому єдиний спосіб перекомпілювати - це натиснути нову фіксацію.

Для повноти дивіться цю статтю на Heroku для компілятора slug . У ньому обговорювалося використання попередньо отриманого гака для виклику процесу компіляції слизів у заголовку "Компіляція".


23
Дякую за вашу відповідь. Це правда, що гак, який попередньо отримує, збирає слимака. (див., наприклад: devcenter.heroku.com/articles/slug-compiler ). Це не обов'язково означає, що heroku не надає (або не міг) альтернативного механізму для виклику компіляції slug, такої як команда heroku CLI. При цьому, ніхто не згадав про таку команду, тому я припускаю, що ваша відповідь є принаймні, принаймні поки що. Дякую!
Натан

1
@Nathan Можливо, ви можете попросити підтримку Heroku про спосіб запустити компіляцію слизів через Heroku Toolbelt? Якщо вони йдуть на це, додайте ще одну відповідь!
culix

7
Тепер є рішення. Heroku-репо доповнення
Refael Ackermann

FYI для мене це рішення не спрацювало, коли у мене було нове значення ENV для налаштування у файлі js, який збирається в Rails application.js. Потрібно було ввести пробіл у js-файл та натиснути, щоб активу вдалося перекомпілювати.
Джош Діель

12
repo:rebuildбільше не є дійсною командою в плагіні
blindstuff

234

Найпростішим рішенням на сьогодні є натиснути порожню комісію .

git commit --allow-empty -m "empty commit"
git push heroku master

53
Ви можете зробити це і зберегти чисту історію зробити форс-штовхаючи попередньої фіксації згодом: git reset HEAD~; git push -f heroku master. Враховує часову вартість іншого розгортання Heroku, але чиста історія FTW.
Пол Еннеслі

2
Просто для доповнення цього псевдоніма у вашому ~/.profileдодати це: alias heroku-rebuild="git reset HEAD~; git push -f heroku master"абоalias heroku-rebuild="git commit --allow-empty -m 'empty commit' && git push heroku master" так ви можете просто набратиheroku-rebuild
unmultimedio

30

Мій загальний підхід:

git commit --amend -C HEAD
git push heroku:master -f

Не впевнений, що я зробив би це у виробництві, не будучи певним, оскільки це технічно переписує останнє зобов'язання, але теоретично це не повинно викликати жодних проблем. Це цілком добре, коли ви протестуєте речі в постановці.

Як додатковий бонус, оскільки у більшості людей проблеми використання Vim для редагування повідомлень про фіксацію SHIFT-ZZ швидко зберігаються та виходять із повідомлення про фіксацію для вас, не змінюючи його.

У відповідній замітці я, злегка шокований, у Heroku досі не мають цієї функції. Я часто бачив, що Хероку не вдається розгорнутись через проблеми на їх кінці.

Дякуємо Майклу Міору за ідею, яку можна використовувати, -C HEADщоб уникнути відкриття редактора.


2
Або просто використовувати, git commit --amend -C HEADщоб взагалі не відкривати редактор і зберігати повідомлення про фіксацію таким же.
Майкл Міор

Дякую @MichaelMior, це прекрасно працювало для мене і не возилося з моєю сприйнятою історією git.
Джеймс Уорд,

Тут потрібно бути обережним, якщо у вас є інша центральна репо (крім героїки). Якщо це так, це призведе до злиття / дублювання комітету в історії наступного разу, коли ви вже виштовхнули останню комісію.
Нік Ф

чому це так анти-користувач?
Лукк

20

Heroku випустили плагін, що запитують: https://github.com/heroku/heroku-repo

Щоб встановити його:

$ heroku plugins:install heroku-repo

Щоб примусити відновити:

$ heroku repo:purge_cache -a appname
$ heroku repo:reset -a appname
$ git push heroku

15

Оновлення: heroku repo: відновити було видалено .

Heroku має API збірки, який ви можете використовувати, див. Створення та звільнення за допомогою API


Ви можете використовувати команду repo: rebuild, якщо надбудова heroku-repo .

heroku repo:rebuild -a appname

https://github.com/heroku/heroku-repo


3
Просто прокоментував і інший потік, але тут варто повторити: Гедонку-репо аддон виглядає добре, але після його спробу я не рекомендую його. Виникла помилка: вона ігнорує прапор --app. Це змусило мене випадково відновити наше виробниче середовище, коли я мав намір відновити постановку. Ця помилка була відкрита проти репо вже більше року, без вирішення. Я видалив цей плагін.
Jasoncrawford

6
Поточна версія heroku-repo не має підкоманди реконструкції
Майк Слінн

Я повинен скинути віддалене репо, оскільки команда відновлення не працює
ваїбхав,

Ви оновили, і ви кажете, що він працює з "Build API", але я не розумію, як це працює ... Будь-яка допомога? Чи потрібно надсилати запит HTTP POST в API, щоб відновити додаток? На якому? Є маркер (причина безпеки)?
Дамба Фа


5

Для цього є плагін heroku .

$ heroku plugins:install heroku-releases-retry
Installing plugin heroku-releases-retry... done
$ heroku releases:retry
Retrying v16 on ⬢ murmuring-lowlands-3398... done, v17

3
Після повторного випуску повторні випуски. Він не повторить невдалу збірку.
Джеремі

-3

Вийміть гілку, потім повторно натисніть на неї. Не потрібно використовувати плагін.

git push heroku :master
git push heroku master

Це призведе до "Відхиленого натискання, не можна видалити головну гілку".
skalee

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.