NoMethodError: undefined `map 'method for: roles: Character in Capistrano 3

I am trying to upgrade some of my Ruby on Rails projects from Capistrano 2.x to Capistrano 3.x.

I followed this great tutorial for setting up configuration files. My configuration files are as follows:

Capfile

require 'capistrano/setup' require 'capistrano/deploy' require 'capistrano/rails' Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r } 

deploy.rb

 lock '3.4.0' set :scm, :git set :deploy_user, "deploy" set :repo_url, "git_url" set :application, "app_name" set :local_app, "193/#{application}" set :deploy_to, "/home/#{deploy_user}/rails/#{application}" set :pty, true set :ssh_options, {:forward_agent => true} set :linked_files, %w{config/database.yml config/secrets.yml} set :linked_dirs, %w{log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system} ### # BBDD settings # set :db_passwd, "db_password" set :db_name, "db_name_production" 

expand /production.rb

 set :stage, :production set :rails_env, :production set :server_ip, "xxx.xxx.xxx.xxx" server server_ip, user: 'deploy', roles: %w{web app db} role :app, server_ip role :web, server_ip role :db, server_ip, :primary => true 

Now when I try to show my Capistrano tasks or when I try to deploy my project, Capistrano is throwing me an error.

(Backtrace limited to imported tasks) aborted! NoMethodError: undefined `map 'method for: role: Symbol

(See complete trace by completing the task with --trace)

enter image description here

I spent one day at Googling with no results. Any idea?

EDIT

cover deployment: setup --trace

 cap aborted! NoMethodError: undefined method `map' for :roles:Symbol /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/task.rb:309:in `set_arg_names' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/task_manager.rb:40:in `define_task' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/task.rb:365:in `define_task' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/dsl_definition.rb:66:in `task' /Users/carro/Sites/193/capistrano/lib/capistrano/tasks/deploy.rake:4:in `block in <top (required)>' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/task_manager.rb:209:in `in_namespace' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/dsl_definition.rb:147:in `namespace' /Users/carro/Sites/193/capistrano/lib/capistrano/tasks/deploy.rake:1:in `<top (required)>' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/rake_module.rb:28:in `load' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/rake_module.rb:28:in `load_rakefile' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/default_loader.rb:10:in `load' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/application.rb:767:in `load_imports' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/capistrano-3.4.0/lib/capistrano/application.rb:93:in `load_imports' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/application.rb:697:in `raw_load_rakefile' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/application.rb:94:in `block in load_rakefile' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/application.rb:176:in `standard_exception_handling' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/application.rb:93:in `load_rakefile' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/application.rb:77:in `block in run' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/application.rb:176:in `standard_exception_handling' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/rake-10.4.2/lib/rake/application.rb:75:in `run' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/capistrano-3.4.0/lib/capistrano/application.rb:15:in `run' /Users/carro/.rvm/gems/ruby-1.9.3-p547/gems/capistrano-3.4.0/bin/cap:3:in `<top (required)>' /Users/carro/.rvm/gems/ruby-1.9.3-p547/bin/cap:23:in `load' /Users/carro/.rvm/gems/ruby-1.9.3-p547/bin/cap:23:in `<main>' /Users/carro/.rvm/gems/ruby-1.9.3-p547/bin/ruby_executable_hooks:15:in `eval' /Users/carro/.rvm/gems/ruby-1.9.3-p547/bin/ruby_executable_hooks:15:in `<main>' 
+6
source share
1 answer

This is because Capistrano tasks are now Rake tasks, and Rake expects this construct:

 task :name, [:arg, :arg] => :dependency do ... end 

Judging by your stack trace, you have Capistrano custom tasks defined in /Users/carro/Sites/193/capistrano/lib/capistrano/tasks/ . You need to convert them to the syntax of Capistrano 3 on ... roles to make them work.

For example, you would modify the Capistrano 2 task as follows:

 task :dump, :roles => :db do ... end 

for this for Capistrano 3:

 task :dump do on primary roles :db do ... end end 

See here for more details.

+14
source

Source: https://habr.com/ru/post/986501/


All Articles