[英]Capistrano 3 + rbenv + sidekiq: Command not found
我正在升級到 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
set :sidekiq_cmd, defer { "bundle exec sidekiq -c5 -r ./lib/load_feeds/sidekiq_runner.rb -q high -q low" }
ENV["RACK_ENV"]
作為配置文件。 因此 rails env 和 rack env 之間的混合這是因為您的服務器上安裝了多個 ruby 版本,並且它們沒有很好地配置。 該消息顯示您當前在deploy.rb
中設置為deploy.rb
部署進程無法運行sidekiq:start
因為有 sidekiq 進程仍在使用 v.1.9.3-p429 運行。
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)
注意:如果您有多個不同 ruby 版本的VirtualHost
,則無需更改全局版本。
最重要的是:在使用不同的 ruby 版本重新部署之前,不要忘記確保沒有使用先前部署的 ruby 版本運行 sidekiq 進程。 此外,請確保您的rbenv_ruby
版本設置遵循deploy.rb
VirtualHost
ruby 版本:
set :rbenv_ruby, '2.3.1'
再次執行cap production deploy
,您將不會再收到rbenv: sidekiq: command not found
錯誤和 apache 錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.