2013-10-14 11 views
13

Sto provando a far diventare Capistrano attivo e funzionante per la prima volta in un'app per rails. Ho un server linux con Ubuntu 12.04, nginx, unicorn e rails, tuttavia, mi sembra che si stiano verificando alcuni problemi. Sto anche utilizzando Capistrano 3.0.0, rails 3.2.14, bundler 1.4.0 & ruby ​​1.9.3p448 utilizzando RVM.Metodo non definito `instance 'per Capistrano :: Configurazione: Classe

Ho solo una fase di produzione impostata e in questo momento sono solo preoccupato per Capistrano che comunica con il mio server e spinge il mio codice da github (Nessuna migrazione e bundling ecc ancora).

Quando provo il comando cap production deploy:check o cap production deploy:setup (che sembra essere deprecato?) Con la messa a punto sotto, ottengo il seguente msg di errore:

Io non sono davvero sicuro dove cominciare su questo errore, e google non suggerisce molto. Ho provato ad aggiungere la gemma rvm-capistrano ma inutilmente. Come posso modificare il mio codice per risolvere questo errore?

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' 

deploy/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 } 

EDIT Dopo guardando l'infrazione l ine in capistrano.rb all'interno di bundler si parla di aggiungere require 'bundler/deployment' a deploy.rb, che sembra aver eliminato l'errore di istanza capistrano.

NOTA Declassato a capistrano 2.15.5 che ha eliminato gli errori.

risposta

20

Prima di tutto, ci sono stati un paio di modifiche apportate a Capistrano 3. Vedere le note di rilascio: http://www.capistranorb.com/2013/06/01/release-announcement.html

passare anche attraverso il readme. https://github.com/capistrano/capistrano/blob/master/README.md

Capistrano 3 si è spostata fuori integrazione bundler in un gem.To risolve il problema:

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. 

Oh, e se si fa uso non voglio bundler come ancora, rimuovere la prima linea : richiede "bundler/capistrano". facile come quello

Inoltre non è possibile utilizzare le variabili come il modo precedente ora.Invece di leggerlo direttamente, usa fetch (: application) per leggere una variabile.

Sarebbe più facile per te tornare a capistrano v2.

+0

Risolto il problema per me, grazie. – Asciant

+0

Non penso davvero che tornare alla v2 sia più semplice. Per prima cosa, vale la pena provare a ricominciare con l'installazione di un cappuccio (anche se fai prima i backup dei file deploy.rb, production.rb e capifile!), Quindi rimetti i pezzi indietro fino a quando non funziona. Inoltre, ho risolto questo problema utilizzando capistrano 3.1. Ho il problema su capistrano 3.3.5. – yekta

+0

@yekta la domanda è stata posta nel 2013. Proprio quando è stato lanciato cap 3. A quel punto sarebbe stato più facile per lui tornare alla v2, poiché non c'era molto aiuto disponibile. –

3

Ho il sospetto che questo problema sia dovuto al fatto che Bundler 1.3.5 non è compatibile con l'ultima versione di Capistrano. Prova ad eseguire l'aggiornamento alle versioni preliminari di Bundler: gem install bundler --pre.


Ho notato anche che si sta utilizzando una versione molto vecchia di Rails 3.2, che è probabilmente vulnerabile ad alcuni exploit di sicurezza. Consiglio vivamente di aggiornare la versione di Rails a qualcosa di più recente, come Rails 3.2.14.

+0

Penso che tu abbia ragione, questo ha anche messo in evidenza alcuni problemi nel mio progetto. Aggiornamento a 3.2.14 come suggerito, proverà a re-capify quando completamente aggiornato e tornare a questo. – dodgerogers747

+1

Per quale valore non è stato risolto per me. – Nippysaurus

3

Per Capistrano 3, si consiglia di utilizzare http://github.com/capistrano/bundler

sua menzionati qui https://github.com/bundler/bundler/blob/master/lib/bundler/capistrano.rb

Problemi correlati