【问题标题】:Capistrano 3 + rbenv + sidekiq: Command not foundCapistrano 3 + rbenv + sidekiq:找不到命令
【发布时间】:2017-03-08 20:49:06
【问题描述】:

我正在升级到 Capistrano 3,并且在部署期间 sidekiq 应该启动。但我收到以下错误:

00:23 sidekiq:start
      01 $HOME/.rbenv/bin/rbenv exec sidekiq --index 0 --pidfile /var/www/my_app/shared/tmp/pids/sidekiq-0.pid --environment staging --logfile …
      01 rbenv: sidekiq: command not found
      01
      01 The `sidekiq' command exists in these Ruby versions:
      01   1.9.3-p429
      01

我没有为这个项目使用系统 ruby​​ 或 rbenv 默认的 ruby​​ 版本。我在VirtualHost apache 配置中设置了 ruby​​ 版本:

PassengerRuby /home/deploy/.rbenv/versions/2.3.1/bin/ruby

$ rbenv versions 返回

  1.9.3-p429
* 2.1.2 (set by /home/deploy/.rbenv/version)
  2.3.1

这是我的Capfile

# Load DSL and set up stages
require "capistrano/setup"

# Include default deployment tasks
require "capistrano/deploy"
require 'capistrano/sidekiq'
require "whenever/capistrano"
require 'airbrake/capistrano/tasks'
require 'capistrano/rbenv'
require 'capistrano/bundler'
require 'capistrano/rails/migrations'
require 'capistrano/passenger'

Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }

这是我的deploy.rb

# config valid only for current version of Capistrano
lock '3.6.1'

server '123.456.789.0', user: 'my_user', roles: %w{web app db}

set :application, 'my_app'
set :repo_url, 'git@server.com:/myApp'
set :ssh_options, { forward_agent: true }
set :passenger_restart_with_touch, true
set :migration_role, :app
set :rbenv_ruby, '2.3.1'
set :rbenv_map_bins, ['rake', 'gem', 'bundle', 'ruby', 'rails', 'sidekiq', 'sidekiqctl']

set :default_env, ->{ { rack_env: fetch(:rails_env) } }

set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'public/system')
set :linked_files, fetch(:linked_files, []).push('config/config.yml')

after 'deploy:finished', 'airbrake:deploy'

set :whenever_command_environment_variables, ->{ { rack_env: fetch(:whenever_environment) } }
set :whenever_environment,  ->{ fetch :rack_env, fetch(:stage, "production") }
set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }

set :sidekiq_env, -> { fetch(:rails_env) }
set :sidekiq_concurrency, 5
set :sidekiq_require, './lib/sidekiq_runner.rb'
set :sidekiq_queue, ['high', 'low']

还有我的deploy/staging.rb(还有一个production.rb):

set :rails_env, "staging"
set :deploy_to, "/var/www/my_app"

role :web, "123.456.789.0"                          # Your HTTP server, Apache/etc
role :app, "123.456.789.0"                          # This may be the same as your `Web` server
role :db,  "123.456.789.0", primary: true # This is where Rails migrations will run
  • 我不确定 capistrano rbenv gem 是否真的使用 ruby​​ 2.3.1 版本进行部署。我很确定这与它有关。但我不知道如何调试这个
  • 使用 capistrano 2 启动 sidekiq 的原始命令是 set :sidekiq_cmd, defer { "bundle exec sidekiq -c5 -r ./lib/load_feeds/sidekiq_runner.rb -q high -q low" }
  • 我正在部署一个 sinatra 应用程序,它使用 ENV["RACK_ENV"] 作为配置文件。因此,rails env 和 rack env 之间的混合

【问题讨论】:

    标签: ruby capistrano sidekiq rbenv capistrano3


    【解决方案1】:

    这是因为您的服务器上安装了多个 ruby​​ 版本,并且配置不正确。该消息显示您当前的部署进程(设置为 deploy.rb 为 v.2.3.1 )无法运行 sidekiq:start,因为仍有使用 v.1.9.3-p429 运行的 sidekiq 进程。

    01 The `sidekiq' command exists in these Ruby versions:
    01   1.9.3-p429
    

    当您想使用不同的rbenv_ruby 版本进行部署时,不要忘记先使用先前部署的rbenv_version 停止当前的sidekiq 进程,在这种情况下,消息中显示的v.1.9.3-p429,在deploy.rb

    set :rbenv_ruby, '1.9.3-p429'
    

    然后做

    $ cap production sidekiq:stop
    

    最好遵循服务器的 apache 配置的 ruby​​ 版本,在你的情况下是 v.2.3.1。因此,您必须将服务器全局 ruby​​ 版本从 v.2.1.2 更改为 v.2.3.1:

    $ rbenv global 2.3.1
    $ rbenv rehash
    

    如果您再次检查$ rbenv version,它将返回

      1.9.3-p429
      2.1.2
    * 2.3.1 (set by /home/deploy/.rbenv/version)
    

    注意:不需要更改全局版本,尤其是如果您有多个 VirtualHost 使用不同的 ruby​​ 版本。

    最重要的是:在使用不同的 ruby​​ 版本重新部署之前,不要忘记确保没有使用以前部署的 ruby​​ 版本运行的 sidekiq 进程。此外,确保您的rbenv_ruby 版本设置遵循VirtualHost ruby​​ 版本deploy.rb

    set :rbenv_ruby, '2.3.1'
    

    再次执行cap production deploy,您将不再收到rbenv: sidekiq: command not found 错误和apache 错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 2016-04-29
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      相关资源
      最近更新 更多