Triển khai lại ứng dụng Heroku mà không cần thay đổi mã


81

Tôi muốn triển khai một ứng dụng Heroku sẽ được thực hiện một cách lý tưởng bằng cách sử dụng git push -u heroku master. Tuy nhiên, điều này sẽ chỉ hoạt động nếu có bất kỳ cam kết nào đang chờ xử lý được đẩy lên master.

Làm cách nào để triển khai lại ứng dụng trong khi không có gì để thúc đẩy? Tôi đã thử git push -u heroku master -fvà vẫn nhận được như vậy bên dưới

Branch master set up to track remote branch master from heroku.
Everything up-to-date

Tái bút: Tôi cũng muốn giữ lại ứng dụng hiện có, có nghĩa là tôi không thể sử dụng câu trả lời này https://stackoverflow.com/a/22043184/968442


3
Điều này nghe giống như một vấn đề XY . Bạn hy vọng đạt được điều gì bằng cách sử dụng lại mã tương tự?
Chris

1
Một trường hợp tôi đã thay đổi rất ít configvars, mà xứng đáng là một bố trí lại nhưng không có cam kết
nehem

1
Đặt var cấu hình khiến ứng dụng của bạn được khởi động lại. Nó sẽ có hiệu lực mà không cần triển khai lại. Bạn có thể cụ thể hơn không?
Chris

2
Thật không may, configvar mà tôi đã loại bỏ DISABLE_COLLECTSTATIC=1, được cho là sẽ gọi một lệnh Django khác manage.py collectstaticđược nối vào logic triển khai heroku.
nehem

Câu trả lời:


131

Thông thường, thiết lập một var cấu hình khiến ứng dụng của bạn được khởi động lại. Trong hầu hết các tình huống, không cần phải triển khai lại sau khi thực hiện việc này.

Nếu bạn thực sự cần kích hoạt triển khai mới, bạn có thể thêm một cam kết trống mới, sau đó đẩy lại Heroku:

git commit --allow-empty -m "Trigger Heroku deploy after enabling collectstatic"
git push heroku master

Cam kết trống mới là một cam kết thông thường. Nó có một hàm băm, một tác giả, một dấu thời gian, v.v. Nó sẽ có cùng một cây với gốc của nó. Điều này sẽ khiến Heroku xây dựng lại slug ứng dụng của bạn bằng cách sử dụng mã giống như lần cam kết trước đó.

Nó hơi khó xử, nhưng nó hoạt động.


Nghe có vẻ đủ công bằng và thực hiện công việc. Bây giờ tôi muốn sao lưu / khôi phục kho lưu trữ ( .git) để ẩn cam kết này khỏi github.
nehem

@itsneo, tôi sẽ không bận tâm. Đó là một cam kết xấu xí, nhưng nếu bạn tiếp tục viết mã trên đầu cam kết trước đó, bạn sẽ phải đẩy đến Heroku vào lần tiếp theo. Đó không phải là một thói quen rất tốt để có được vào, mặc dù nó có thể là đôi khi cần thiết ...
Chris

Ngay cả với git commit --allow-emptytôi nhận được Everything up-to-datetừ Heroku ...
Benny Neugebauer

@BennyNeugebauer, hãy nhìn vào của bạn git log. Bạn đã tạo thành công một cam kết mới trước khi đẩy?
Chris

4
Ah, tôi thấy vấn đề! Tôi đã ở một chi nhánh địa phương khác (hơn master). Vì vậy, tôi đã phải thực hiện: git push -f heroku the_branch_i_changed:master.
Benny Neugebauer

20

Bạn cũng có thể làm điều đó từ UI!

  1. Đăng nhập vào Herokutrang tổng quan của bạn và đi tới deployphần
  2. Tìm Manual deploytùy chọn

Nhấn Deploy Branchnút!

nhập mô tả hình ảnh ở đây


1
Cần lưu ý rằng bạn phải kết nối ứng dụng của mình với GitHub để có tùy chọn này. Nếu bạn đang sử dụng phương pháp triển khai Heroku Git mà chưa kết nối ứng dụng với repo GitHub, thì cách triển khai thủ công sẽ không rõ ràng ngay lập tức.
Derek

11

Hiện tại cũng có một plugin cho dòng lệnh Heroku cho phép bạn phát hành lại slug được triển khai gần đây nhất.

Xem https://www.npmjs.com/package/heroku-releases-retry


Lúc đầu, tôi nghĩ đây là giải pháp, nhưng thực sự nó chỉ triển khai lại chứ không xây dựng lại. Nhưng có một cách để xây dựng lại mà không làm ảnh hưởng đến lịch sử Git của bạn bằng cách đẩy một cam kết mới: stackoverflow.com/q/9713183/322863
aef

2

Bạn có thể chạy heroku restart --app app_namevà bạn có thể đi.


2
Điều này không xây dựng lại ứng dụng, nó chỉ khởi động lại
PanMan

@PanMan Câu hỏi cho biết "Làm cách nào để triển khai lại ứng dụng trong khi không có gì để thúc đẩy?". Nó không yêu cầu ứng dụng xây dựng lại mà là khởi động lại và không có thay đổi nào, tôi không hiểu tại sao bạn vẫn muốn.
Leandro

1
Nó nói rõ ràng là "triển khai lại" chứ không phải "khởi động lại". Ví dụ: tôi cần triển khai lại (không phải khởi động lại), bởi vì tôi đang cố gắng Dockerize ứng dụng của mình bằng Heroku và khi đang gỡ lỗi, tôi không muốn có khả năng gây ô nhiễm cây git của mình. Đó là cách tôi kết thúc câu hỏi SO này.
Mike K
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.