bundler: failed to load command: cap and wrong number of arguments error rails 6

328 Views Asked by At

Its showing me this error when I try to deploy it on staging my rails verison is Rails 6.1.4.4 and capistrano gem version is 3.11.0 Ruby version is 3.0.4. It breaks everytime at deploy:check:linked_dirs . Not sure what causing it .

 bundler: failed to load command: cap (/Users/invozone-guest/.rbenv/versions/3.0.4/bin/cap)
/Users/invozone-guest/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/gems/i18n-1.12.0/lib/i18n.rb:210:in `translate': wrong number of arguments (given 2, expected 0..1) (ArgumentError)

deploy.rb file

# config valid for current version and patch releases of Capistrano
lock "~> 3.11.0"

set :application, 'spree_demo'
set :repo_url, '[email protected]:freshprep_devs/spree_demo.git'
set :branch, 'master'

set :rbenv_type, :system
set :rbenv_ruby, '3.0.4'

set :rbenv_custom_path, '/home/deploy/.rbenv/'

# Default branch is :master
ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }.call
set :use_sudo, true


# Default value for :pty is false
set :pty, true

task :sake do
  on roles(:app), in: :sequence, wait: 5 do
    within release_path do
      as :deploy do
        with rails_env: :staging do
          execute :rake, ENV['task'], "RAILS_ENV=staging"
        end
      end
    end
  end
end
namespace :deploy do
  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      # Your restart mechanism here, for example:
      # execute :touch, release_path.join('tmp/restart.txt')
      execute 'sudo', '/etc/init.d/spree', 'restart'
    end
  end
  after :publishing, :restart

  after :restart, :clear_cache do
    on roles(:web), in: :groups, limit: 3, wait: 10 do
      # Here we can do anything such as:
      # within release_path do
      #   execute :rake, 'cache:clear'
      # end
    end
  end

end

my staging.rb file

role :app, %w{34.95.59.175}
role :web, %w{34.95.59.175}
role :db,  %w{34.95.59.175}



server '34.95.59.175', user: 'deploy', roles: %w{web app}

set :rbenv_custom_path, '/home/deploy/.rbenv'
set :deploy_to, '/home/deploy/apps/spree_demo'

1

There are 1 best solutions below

0
Joe Thor On

Upgrade your Capistrano version to be greater than 3.14.1.

Seems like it is an issue with Ruby 3 and Capistrano versions below 3.14.1

https://github.com/capistrano/capistrano/issues/2091

I upgraded to 3.17.2 and I was able to deploy using Ruby 3.0 successfully.