คอมไพล์ Heroku กระสุนโดยไม่ต้องกดหรือเปลี่ยนค่า


147

ฉันสงสัยว่ามีวิธีการบังคับให้ Heroku ทำการคอมไพล์กระสุนโดยไม่ต้องกดคอมมิทใหม่และ / หรืออัพเดทตัวแปรการตั้งค่า

ทำไมฉันถึงต้องการทำสิ่งนี้:

ฉันใช้ Cedar stack บน Heroku สำหรับแอป Rails 3.2 และฉันมีปัญหากับrake assets:precompileงานที่ล้มเหลว (ในระหว่างการรวบรวมเท่านั้น --- หลังจากนั้นก็ใช้งานได้ดีกับ a heroku run) ฉันสงสัยอย่างมากว่านี่เป็นเพราะตัวแปรสภาพแวดล้อมบางอย่างไม่สามารถใช้งานได้ในระหว่างการรวบรวมกระสุนและฉันคิดว่าheroku labs:enable user_env_compileคุณสมบัติการทดลองจะแก้ปัญหานี้

แต่ด้วยuser_env_compileคุณสมบัติเปิดการเปลี่ยนแปลงการตั้งค่าไม่ได้เรียก recompilation ของกระสุนและรหัสของฉันไม่ได้เปลี่ยนดังนั้นผมจึงไม่ได้มีการกระทำใด ๆ ที่ใหม่ที่จะผลักดัน

แน่นอนฉันสามารถผลักดัน "ดัมมี่" ที่มีการเปลี่ยนแปลงเล็กน้อยซึ่งอาจเป็นคำตอบที่ง่ายที่สุด --- แต่ฉันสงสัยว่ามีคำสั่ง heroku ที่จะให้ฉันคอมไพล์กระสุนโดยตรง

ขอบคุณ!


1
ไม่มีอะไรในไคลเอนต์ heroku CLI?
Matt Ball

ไม่ใช่คำตอบโดยตรง แต่ควรบันทึกเอกสารการเปลี่ยนแปลงการพึ่งพาเช่นอาศัยฟีเจอร์ SAAS เป็นต้นคำแนะนำของฉันคือการเพิ่มรายการใน CHANGELOG ที่ที่กล่าวถึงตอนนี้คุณต้องพึ่งพาฟีเจอร์นี้และผลักดันการเปลี่ยนแปลงนั้นเพื่อกระตุ้นการสร้างใหม่ กระสุน.
patcoll

คำตอบ:


93

การคอมไพล์ Slug ถูกเรียกใช้ด้วยตะขอ pre-recieve git ดังนั้นวิธีเดียวที่จะคอมไพล์ใหม่คือการส่งคอมมิตใหม่

เพื่อความสมบูรณ์ดูบทความนี้ใน Heroku สำหรับคอมไพเลอร์กระสุน มันกล่าวถึงการใช้ตะขอ pre-recieve เพื่อเรียกใช้กระบวนการรวบรวมกระสุนภายใต้หัวข้อการรวบรวม


23
ขอบคุณสำหรับคำตอบ. มันเป็นความจริงที่ว่าตะขอคอมไพล์รับก่อนจะรวมตัวบุ้ง (ดูตัวอย่างเช่น: devcenter.heroku.com/articles/slug-compiler ) นั่นไม่ได้หมายความว่า heroku ไม่ได้ (หรือไม่สามารถ) ให้กลไกทางเลือกในการเรียกการรวบรวมกระสุนเช่นคำสั่ง heroku CLI ที่กล่าวว่าไม่มีใครพูดถึงคำสั่งดังกล่าวดังนั้นฉันจึงสันนิษฐานว่าคำตอบของคุณคือจุดที่อย่างน้อยตอนนี้ ขอบคุณ!
นาธาน

1
@ นาธานบางทีคุณอาจขอให้ Heroku ช่วยหาวิธีในการรวบรวมกระสุนด้วย Heroku Toolbelt? หากพวกเขาไปหามันให้เพิ่มคำตอบอื่น!
culix

7
ตอนนี้มีทางออก Heroku-repo Add-on
Refael Ackermann

FYI สำหรับฉันโซลูชันนี้ไม่ทำงานเมื่อฉันมีค่า ENV ใหม่สำหรับการตั้งค่าในไฟล์ js ที่ได้รับการคอมไพล์ใน Rails application.js ใช้พื้นที่ว่างในไฟล์ js และกดเพื่อให้สินทรัพย์ทำการคอมไพล์ใหม่
Josh Diehl

12
repo:rebuildไม่มีคำสั่งที่ถูกต้องในปลั๊กอินอีกต่อไปตามที่เห็นในที่นี้: github.com/heroku/heroku-repo/commit/…
blindstuff

234

วิธีแก้ปัญหาที่ง่ายที่สุดสำหรับตอนนี้คือการผลักดันที่ว่างเปล่ากระทำ

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

53
คุณสามารถทำสิ่งนี้และรักษาประวัติการกระทำที่สะอาดgit reset HEAD~; git push -f heroku masterได้ ต้องเสียเวลาของการปรับใช้ Heroku อื่น แต่ทำความสะอาดประวัติ FTW
Paul Annesley

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 ยังไม่มีคุณสมบัตินี้ ฉันมักจะเห็น Heroku ล้มเหลวในการปรับใช้เนื่องจากปัญหาในตอนท้าย

ขอบคุณ Michael Mior สำหรับแนวคิดที่จะใช้-C HEADเพื่อหลีกเลี่ยงการเปิดตัวแก้ไข


2
หรือเพียงใช้git commit --amend -C HEADเพื่อหลีกเลี่ยงการเปิดโปรแกรมแก้ไขเลยและรักษาข้อความการกระทำเหมือนเดิม
Michael Mior

ขอบคุณ @MichaelMior นี่ใช้งานได้ดีสำหรับฉันและไม่ยุ่งกับประวัติการคอมไพล์ของฉัน
James Ward

สิ่งหนึ่งที่ต้องระวังที่นี่คือถ้าคุณมี repo ส่วนกลางที่แตกต่างกัน (นอกเหนือจาก heroku) หากเป็นเช่นนี้สิ่งนี้จะส่งผลให้เกิดการรวม / ซ้ำการกระทำในประวัติศาสตร์ในครั้งต่อไปที่คุณดึงถ้าคุณได้ผลักการกระทำสุดท้ายออกไปแล้ว
Nick F

ทำไมผู้ใช้จึงต่อต้าน
Lucke

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 มี Build API ที่คุณสามารถใช้ได้โปรดดู: การสร้างและการปล่อยโดยใช้ API


คุณสามารถใช้repo: สร้างคำสั่งถ้าHeroku-repo Add-on

heroku repo:rebuild -a appname

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


3
เพียงแค่แสดงความคิดเห็นในหัวข้ออื่น ๆ เช่นกัน แต่มันก็คุ้มค่าการทำซ้ำที่นี่: heroku-repo addon ดูดี แต่หลังจากลองฉันไม่แนะนำ มีข้อบกพร่องที่ไม่ดี: มันจะละเว้น --app ธง สิ่งนี้ทำให้ฉันสร้างสภาพแวดล้อมการผลิตของเราขึ้นใหม่โดยไม่ได้ตั้งใจเมื่อฉันต้องการสร้างการจัดเตรียมใหม่ ข้อผิดพลาดนี้ได้เปิดกับ repo มานานกว่าหนึ่งปีแล้วโดยไม่มีการแก้ไข ฉันถอนการติดตั้งปลั๊กอินนี้แล้ว
jasoncrawford

6
เวอร์ชั่นปัจจุบันของ heroku-repo ไม่มีคำสั่งย่อย rebuild
Mike Slinn

ฉันมีการตั้งค่า repo ระยะไกลเป็นสร้างคำสั่งไม่ทำงาน
jain Vaibhav

คุณอัปเดตและคุณบอกว่ามันใช้งานได้กับ "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
การดำเนินการนี้จะลองเผยแพร่อีกครั้งหลังจากการเผยแพร่ล้มเหลว มันจะไม่ลองสร้างที่ล้มเหลวอีกครั้ง
Jeremy

-3

นำกิ่งไม้ออกแล้วดันใหม่ ไม่จำเป็นต้องใช้ปลั๊กอิน

git push heroku :master
git push heroku master

จะส่งผลให้ "กดถูกปฏิเสธไม่สามารถลบสาขาหลัก"
skalee

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.