2013-10-14 23 views
13

我想讓Capistrano第一次啓動並在Rails應用程序中運行。我有一臺運行Ubuntu 12.04的Linux服務器,nginx,unicorn和rails,但是,我似乎遇到了一些問題。我也使用Capistrano 3.0.0,rails 3.2.14,bundler 1.4.0 & ruby​​ 1.9.3p448使用RVM。Capistrano的未定義方法實例::配置:類

我只有一個生產階段,在這個時間點上,我只關心Capistrano與我的服務器通信,並從github推送我的代碼(沒有遷移和捆綁等等)。

當我嘗試的命令cap production deploy:checkcap production deploy:setup(這似乎是過時?)下面的設置,我收到以下錯誤信息:

我真的不知道從哪裏開始對這個錯誤,並谷歌不建議太多。我曾嘗試添加rvm-capistrano寶石,但無濟於事。我如何修改我的代碼來解決這個錯誤?

cap aborted! 
undefined method `instance' for Capistrano::Configuration:Class 
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/gems/bundler-1.4.0.rc.1/lib/bundler/capistrano.rb:11:in `<top (required)>' 
config/deploy.rb:1:in `<top (required)>' 
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/gems/capistrano-3.0.0/lib/capistrano/setup.rb:12:in `load' 
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/gems/capistrano-3.0.0/lib/capistrano/setup.rb:12:in `block (2 levels) in <top (required)>' 
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/gems/capistrano-3.0.0/lib/capistrano/application.rb:12:in `run' 
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/gems/capistrano-3.0.0/bin/cap:3:in `<top (required)>' 
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/bin/cap:23:in `load' 
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/bin/cap:23:in `<main>' 
Tasks: TOP => production 
(See full trace by running task with --trace) 

deploy.rb

require "bundler/capistrano" 

set :stages, %w(staging production) 
set :default_stage, "production" 

set :application, "my_app" 
set :user, "andrew" 
set :scm, "git" 
set :repository, "https://github.com/my_repo/#{application}" 
set :branch, "master" 

set :deploy_to, "/home/rails/#{application}" 
set :deploy_via, :remote_cache 
set :use_sudo, false 

default_run_options[:pty] = true 
ssh_options[:forward_agent] = true 

after "deploy", "deploy:cleanup" # keep only the last 5 releases 

namespace :deploy do 
    task :restart, roles: :app do 
     run "touch #{current_path}tmp/restart.txt" 
    end 
    end 
    after :finishing, 'deploy:cleanup' 

部署/ production.rb

#Real IP ommitted 
server "10.2.32.68", :web, :app, :db, primary: true 

Capfile

# Load DSL and Setup Up Stages 
require 'capistrano/setup' 

# Includes default deployment tasks 
require 'capistrano/deploy' 

# require 'capistrano/rvm' 
# require 'capistrano/rbenv' 
# require 'capistrano/chruby' 
# require 'capistrano/bundler' 
# require 'capistrano/rails/assets' 
# require 'capistrano/rails/migrations' 

# Loads custom tasks from `lib/capistrano/tasks' if you have any defined. 
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r } 

編輯看着違規l在在bundler中的capistrano.rb中,它提到將require'bundler/deployment'添加到deploy.rb中,似乎它已經擺脫了capistrano實例錯誤。

注意降級到capistrano 2.15.5這擺脫了錯誤。

回答

20

首先,有一對夫婦在Capistrano的3 所做的更改,請參見發行說明:http://www.capistranorb.com/2013/06/01/release-announcement.html

而且經歷的自述。 https://github.com/capistrano/capistrano/blob/master/README.md

Capistrano的3搬出了捆綁融合成gem.To解決您的問題:

1. Uncomment require 'capistrano/bundler' from capify. 
2. add gem 'capistrano-bundler' to your gemfile. 
3. Go through the comments in capify file and uncomment whichever module you require. 

哦,如果你不想使用捆綁作爲然而,除去第一線:需要「bundler/capistrano」。那樣容易。

此外,您不能像以前的方式使用變量。而不是直接讀取它,使用fetch(:application)來讀取一個變量。

我會更容易讓你回到capistrano v2。

+0

爲我修好了,謝謝。 – Asciant

+0

我真的不認爲回到v2更容易。首先,值得嘗試重新開始一次cap安裝(儘管首先重新制作deploy.rb,production.rb和capifile文件!),然後再添加一些內容直到它工作。另外,我通過使用capistrano 3.1來解決這個問題。我關於capistrano 3.3.5的問題。 – yekta

+0

@yekta這個問題在2013年被問到。就在第3章發佈時。在那個時候,他會更容易回到第2版,因爲沒有太多的幫助。 –

3

我懷疑這個問題是因爲Bundler 1.3.5與最新版本的Capistrano不兼容。嘗試升級到Bundler預發佈:gem install bundler --pre


我也注意到你正在使用非常古老的版本的Rails 3.2,這可能是脆弱的一些安全漏洞的。我真的強烈建議將該版本的Rails升級到更新的版本,比如Rails 3.2.14。

+0

提到的,我認爲你是對的,這也突出了我的項目中的幾個問題。按照建議升級到3.2.14,在嘗試完全更新時重新設置並重新設置。 – dodgerogers747

+1

對於它值得升級的東西沒有解決這個問題。 – Nippysaurus

3

對於Capistrano的3,他們建議使用http://github.com/capistrano/bundler

它這裏https://github.com/bundler/bundler/blob/master/lib/bundler/capistrano.rb

相關問題