2015-05-04 15 views
6

Tôi đang cố gắng nâng cấp một số dự án Ruby on Rails từ Capistrano 2.x lên Capistrano 3.x.NoMethodError: undefined method `map 'cho: roles: Symbol in Capistrano 3

Tôi đã theo dõi số tutorial tuyệt vời này để thiết lập các tệp cấu hình. file cấu hình của tôi trông như thế này:

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" 

triển khai/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 

Bây giờ, khi tôi cố gắng thể hiện các nhiệm vụ Capistrano của mình hoặc khi tôi cố gắng triển khai dự án của mình, Capistrano ném cho tôi một lỗi.

(Backtrace restricted to imported tasks) cap aborted! NoMethodError: undefined method `map' for :roles:Symbol

(See full trace by running task with --trace)

enter image description here

tôi đã dành một ngày Googling không có kết quả. Bất kỳ ý tưởng?

EDIT

nắp sản xuất triển khai: Thiết lập --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>' 
+0

Bản đồ là phương thức mảng, ở đâu đó trong mã bạn đang gọi: vai trò để nó phàn nàn về lỗi đó. – uday

+0

Không, nó không phải là một lỗi trong mã hoặc ít nhất là không phải tôi đã viết bản đồ phương pháp. Nếu tôi làm một "Tìm trong dự án" bản đồ từ, không có kết quả. –

+0

Bạn có thể chạy 'triển khai sản xuất mũ: thiết lập --trace' để xem thêm thông tin không? – davids

Trả lời

14

này đang xảy ra bởi vì nhiệm vụ Capistrano đang Rake nhiệm vụ và Rake hy vọng một cấu trúc như thế này:

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

Đánh giá từ theo dõi ngăn xếp của bạn, bạn có các nhiệm vụ Capistrano tùy chỉnh được xác định trong /Users/carro/Sites/193/capistrano/lib/capistrano/tasks/. Bạn cần phải chuyển đổi chúng sang cú pháp Capistrano 3 on ... roles để làm cho chúng hoạt động.

Ví dụ, bạn sẽ thay đổi một công việc Capistrano 2 như thế này:

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

này cho Capistrano 3:

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

Xem here để biết thêm chi tiết.

Các vấn đề liên quan