2013-07-31 142 views
1

當我試圖與Capistrano的部署我得到一個錯誤Capistrano的軌道部署失敗

/home/username/.rvm/gems/[email protected]/gems/capistrano-2.15.5/lib/capistrano/recipes/deploy/assets.rb:28:in `parse_manifest': undefined method `to_a' for #<String:0x9fa62d0> (NoMethodError) 

此外,在輸出我有這樣的多個實例:

** [out :: *IP_HERE*] SHELL=/bin/bash 
** [out :: *IP_HERE*] SSH_CLIENT=*IP_HERE* 53366 22 
** [out :: *IP_HERE*] USER=root 
** [out :: *IP_HERE*] MAIL=/var/mail/root 
** [out :: *IP_HERE*] PATH=/usr/local/rvm/gems/ruby-2.0.0-p247/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-2.0.0-p247/bin:/home/rails/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 
** [out :: *IP_HERE*] PWD=/root 
** [out :: *IP_HERE*] LANG=en_US.UTF-8 
** [out :: *IP_HERE*] SHLVL=1 
** [out :: *IP_HERE*] HOME=/root 
** [out :: *IP_HERE*] LANGUAGE=en_US:en 
** [out :: *IP_HERE*] LOGNAME=root 
** [out :: *IP_HERE*] SSH_CONNECTION=*IP_HERE* 53366 *IP_HERE* 22 
** [out :: *IP_HERE*] _=/usr/bin/env 
** [out :: *IP_HERE*] RUBY_VERSION=ruby-2.0.0-p247 
** [out :: *IP_HERE*] GEM_HOME=/usr/local/rvm/gems/ruby-2.0.0-p247:/usr/local/rvm/gems/[email protected] 
** [out :: *IP_HERE*] BUNDLE_PATH=/usr/local/rvm/gems/ruby-2.0.0-p247 

我發現了什麼是這個輸出來自capture功能,在寶石定義(path_to_cap_gem/configuration/actions/inspect.rb):

def capture(command, options={}) 
     output = "" 
     invoke_command(command, options.merge(:once => true, :eof => !command.include?(sudo))) do |ch, stream, data| 
      case stream 
      when :out then output << data 
      when :err then warn "[err :: #{ch[:server]}] #{data}" 
      end 
      end 
     output 
end 

就這樣功能parse_manifest試圖解析capture方法,而不是它想要的東西的這個輸出。

奇怪的是PATH字符串與/usr/games結尾。的Gemfile的

部分:

gem 'capistrano' 
gem 'rvm-capistrano' 

Capfile:

load 'deploy' 
# Uncomment if you are using Rails' asset pipeline 
load 'deploy/assets' 
load 'config/deploy' # remove this line to skip loading any of the default tasks 

deploy.rb:

require 'bundler/capistrano' 
require 'rvm/capistrano' 
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 
set :application, 'dvr_rails' 


set :rvm_ruby, "ruby-2.0.0-p247" 
set :rvm_ruby_string, '[email protected]' 
set :rvm_gem_home, "/usr/local/rvm/gems/#{fetch(:rvm_ruby)}" 
set :rvm_ruby_path, "/usr/local/rvm/rubies/#{fetch(:rvm_ruby)}" 
set :default_environment, { 
     'RUBY_VERSION' => fetch(:rvm_ruby), 
     'GEM_HOME' => "#{fetch(:rvm_gem_home)}:#{fetch(:rvm_gem_home)}@global", 
     'BUNDLE_PATH' => fetch(:rvm_gem_home), 
     'PATH' => "#{fetch(:rvm_gem_home)}/bin:#{fetch(:rvm_gem_home)}@global/bin:#{fetch(:rvm_ruby_path)}/bin:/home/rails/.rvm/bin:$PATH;", 
} 

set :rvm_type, :system # Copy the exact line. I really mean :system here* 

set :scm, :none 
set :repository, '.' 
set :deploy_via, :copy 



server 'IP_HERE', :app, :web, :db, :primary => true 

#If you are using Passenger mod_rails uncomment this: 
namespace :deploy do 
    task :start do ; end 
    task :stop do ; end 
    task :restart, :roles => :app, :except => { :no_release => true } do 
     run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" 
    end 
end 

set :deploy_to, '/var/sites/dvr_rails' 

set :user, 'root' 
set :use_sudo, 'true' 
set :password, 'password' 

任何想法?

紅寶石2.0.0,導軌4,Capistrano的2.15.5。服務器 - Ubuntu的12.04,JS可執行 - 的NodeJS。

回答

0

解決它。還是不知道到底發生了什麼有深capture功能,但編輯deploy.rb幫助。 這是我的工作配置:

require 'bundler/capistrano' 
require 'rvm/capistrano' 
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 
set :application, 'dvr_rails' 

set :rvm_ruby, "ruby-2.0.0-p247" 
set :rvm_ruby_string, "[email protected]" 
set :rvm_gem_home, "/usr/local/rvm/gems/#{fetch(:rvm_ruby_string)}" 

=begin 
# These sets somehow messed up everything. 
set :rvm_ruby_path, "/usr/local/rvm/rubies/#{fetch(:rvm_ruby)}" 
set :default_environment, { 
     'RUBY_VERSION' => fetch(:rvm_ruby), 
     'GEM_HOME' => "#{fetch(:rvm_gem_home)}:#{fetch(:rvm_gem_home)}@global", 
     'BUNDLE_PATH' => fetch(:rvm_gem_home), 
     'PATH' => "#{fetch(:rvm_gem_home)}/bin:#{fetch(:rvm_gem_home)}@global/bin:#{fetch(:rvm_ruby_path)}/bin:/home/rails/.rvm/bin;", 
} 
=end 


#set :rvm_bin_path, "/usr/local/rvm/bin" 
set :rvm_type, :system # Copy the exact line. I really mean :system here* 

set :scm, :none 
set :repository, '.' 
set :deploy_via, :copy 

set :rails_env, 'production' 


server 'IP_HERE', :app, :web, :db, :primary => true 


#If you are using Passenger mod_rails uncomment this: 
namespace :deploy do 
    task :start do ; end 
    task :stop do ; end 
    task :restart, :roles => :app, :except => { :no_release => true } do 
     run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" 
    end 
end 

set :deploy_to, '/var/sites/dvr_rails' 

set :user, 'root' 
#set :use_sudo, 'true' #loggin as root, so no sudo required 
set :password, 'password'