【问题标题】:How to restart Heroku worker using heroku gem如何使用 heroku gem 重启 Heroku worker
【发布时间】:2012-03-08 04:39:32
【问题描述】:

我正在努力寻找如何调用相当于(取自this article):

heroku restart worker.1

使用heroku gem。我看到有 restartps_restart 方法,但看不到我可以在哪里指定只重启这 1 个工作人员而不是整个应用程序。

【问题讨论】:

    标签: heroku


    【解决方案1】:

    这是重新启动任何特定进程的命令

    heroku ps:restart worker.1 --app APP_NAME
    

    【讨论】:

    • 由于我们已经从问题中知道特定进程是worker.1,我们可以将其改写为heroku ps:restart worker.1 --app APP_NAME
    【解决方案2】:

    我正在使用 cron 从应用程序内重新启动特定的工作人员。像这样:

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

    来自Heroku API Doc

    【讨论】:

      【解决方案3】:

      使用“heroku-api”gem,而不是“heroku”gem。以这种方式使用“heroku”gem 仍然有效(截至今天),但已被弃用。它旨在通过控制台使用。

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

      api gem 看起来很容易使用。从 heroku 网站获取您的 API 密钥,将其放入您的应用配置变量中,然后调用:

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

      【讨论】:

        【解决方案4】:

        目前,您必须从 heroku 获取“platform-api”gem (documentation here),因为“heroku”gem 不再工作,而“heroku-api”gem 用于与 Heroku Legacy API 交互.旧版 API 将于 2017 年 4 月 15 日停用。

        首先,您必须通过 heroku toolbelt 命令行工具创建一个 oAuth 令牌:

        $ 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
        

        在实例化客户端时使用 Token 值:

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

        使用此命令重新启动特定的测功机:

        heroku.dyno.restart(app_id_or_app_name, dyno_id_or_dyno_name)
        

        或者用这个命令重新启动:

        heroku.dyno.restart_all(app_id_or_app_name)
        

        您可以使用

        获取所有应用的 ID
        heroku.app.list
        

        以及应用程序的 dynos 的 ids via

        heroku.dyno.list(app_id_or_app_name)
        

        【讨论】:

        • 使用 HEROKU_API_KEY 配置变量的旧方法现在是多余的吗?我应该将 OAuth 令牌保存为新的配置变量吗?
        【解决方案5】:

        稍微扩展一下coderuby的答案:

        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
        

        已设置适当的环境变量。您可以将其包含在 rake 任务中,然后让 Heroku 的调度程序在您认为合适时运行它。

        【讨论】:

          猜你喜欢
          • 2012-08-15
          • 2014-09-17
          • 2018-08-23
          • 1970-01-01
          • 2020-12-31
          • 2020-08-14
          • 2016-11-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多