2012-03-08 30 views

Trả lời

14

tôi đang làm khởi động lại lao động cụ thể từ bên trong ứng dụng bằng cách sử dụng cron. Như thế này:

heroku = Heroku::Client.new(ENV['APP_USERNAME'], ENV['APP_PASSWORD']) 
heroku.ps_restart(ENV['APP_NAME'], :ps =>'worker.1') 

Từ Heroku API Doc

40

Đây là lệnh để khởi động lại bất kỳ quá trình đặc biệt

heroku ps:restart worker.1 --app APP_NAME 
+0

Vì chúng tôi đã biết từ câu hỏi rằng quy trình cụ thể là 'worker.1', chúng tôi có thể viết lại nó để nói' heroku ps: restart worker.1 --app APP_NAME'. –

5

Sử dụng "Heroku-api" đá quý, không những "Heroku" viên ngọc. Sử dụng đá quý "heroku" theo cách này vẫn hoạt động (tính đến hôm nay), nhưng không được dùng nữa. Nó có nghĩa là để được sử dụng thông qua giao diện điều khiển.

https://github.com/heroku/heroku.rb

Đá quý api trông rất dễ sử dụng. Lấy bạn khóa API từ trang web Heroku, đặt nó trong các biến ứng dụng cấu hình của bạn, và gọi:

require 'heroku-api' 
heroku.post_ps_restart('app', 'ps' => 'web.1') # restart 'web.1' process for 'app' app 
1

Hiện tại, bạn có để có những "platform-api" đá quý (documentation here) từ Heroku vì "Heroku" viên ngọc là không hoạt động nữa và đá quý "heroku-api" được sử dụng để tương tác với API Di sản Heroku. The Legacy API sẽ ngưng hoạt động vào ngày 15 tháng 4, 2017.

Trước tiên, bạn phải tạo một mã thông báo OAuth qua công cụ dòng lệnh Heroku toolbelt:

$ heroku plugins:install heroku-cli-oauth 
$ heroku authorizations:create -d "Platform API example token" 
Created OAuth authorization. 
    ID:   2f01aac0-e9d3-4773-af4e-3e510aa006ca 
    Description: Platform API example token 
    Scope:  global 
    Token:  e7dd6ad7-3c6a-411e-a2be-c9fe52ac7ed2 

Sử dụng giá trị Mã khi instantiating một khách hàng:

require 'platform-api' 
heroku = PlatformAPI.connect_oauth('e7dd6ad7-3c6a-411e-a2be-c9fe52ac7ed2') 

khởi động lại một Dyno cụ thể với lệnh này:

heroku.dyno.restart(app_id_or_app_name, dyno_id_or_dyno_name) 

hoặc khởi động lại một ll với lệnh này:

heroku.dyno.restart_all(app_id_or_app_name) 

Bạn có thể lấy id của tất cả các ứng dụng của bạn với

heroku.app.list 

Và id của dynos của ứng dụng thông qua

heroku.dyno.list(app_id_or_app_name) 
+0

Phương pháp cũ của việc sử dụng cấu hình HEROKU_API_KEY var có dư thừa không? Tôi có nên lưu mã thông báo OAuth dưới dạng var cấu hình mới không? – Tom

0

Mở rộng trên coderuby của câu trả lời một bit:

heroku = PlatformAPI.connect_oauth(ENV['PLATFORM_API_TOKEN']) 

worker_ids = heroku.dyno 
    .list(ENV['HEROKU_APP_NAME']) 
    .select { |dyno| dyno['type'] == 'worker' } 
    .map { |dyno| dyno['id'] } 

worker_ids.each do |id| 
    heroku.dyno.restart(ENV['HEROKU_APP_NAME'], id) 
end 

Có thiết lập các biến môi trường thích hợp. Bạn có thể bao gồm điều này trong một nhiệm vụ rake sau đó có lịch trình của Heroku chạy nó khi bạn thấy phù hợp.

Các vấn đề liên quan