2013-10-14 15 views
13

Próbuję uruchomić Capistrano i uruchomić go po raz pierwszy w aplikacji rails. Mam serwer linuksowy z systemem Ubuntu 12.04, nginx, jednorożcem i szynami, jednak wydaje mi się, że mam kilka problemów. Używam również Capistrano 3.0.0, rails 3.2.14, bundler 1.4.0 & ruby ​​1.9.3p448 używając RVM.Niezdefiniowana metoda "instance" dla Capistrano :: Configuration: Class

Mam tylko etap produkcji i teraz zajmuję się tylko komunikowaniem się Capistrano z moim serwerem i przesuwaniem mojego kodu z github (jeszcze nie ma migracji i pakowania itp.).

Kiedy próbuję polecenie cap production deploy:check lub cap production deploy:setup (co wydaje się być przestarzałe?) O poniższej konfiguracji, pojawia się następujący msg błędzie:

nie jestem pewien, gdzie zacząć o tym błędzie, a Google nie sugeruje zbyt wiele. Próbowałem dodać klejnot rvm-capistrano, ale bez skutku. Jak mogę zmienić mój kod, aby rozwiązać ten błąd?

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' 

wdrożyć/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 Po zapoznaniu się z naruszającego l ine w capistrano.rb wewnątrz bundler wspomina o dodaniu wymagać "bundler/deployment" do deploy.rb, które wydawało się pozbyć błędu instancji capistrano.

UWAGA Zdegradowana do Capistrano 2.15.5, która pozbyła się błędów.

Odpowiedz

20

Przede wszystkim, było kilka zmian dokonanych w Kapistrana 3. Zobacz informacje o wydaniu: http://www.capistranorb.com/2013/06/01/release-announcement.html

Również przejść przez readme. https://github.com/capistrano/capistrano/blob/master/README.md

Capistrano 3 został przeniesiony na integrację Bundler w gem.To rozwiązać swój problem:

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 i jeśli nie chce use Bundler jak dotąd, usuń pierwszą linię : wymaga "bundler/capistrano". łatwe jak to.

Również nie można używać zmiennych, takich jak poprzedni sposób teraz.Zamiast bezpośrednio czytać, użyj funkcji pobierania (: application), aby odczytać zmienną.

Byłoby mi łatwiej wrócić do capistrano v2.

+0

Naprawiono to dla mnie, dzięki. – Asciant

+0

Naprawdę nie sądzę, aby powrót do wersji 2 był łatwiejszy. Najpierw warto zacząć od nowa z instalacją cap (ale najpierw wykonaj kopię zapasową plików deploy.rb, production.rb i capifile!), A następnie dodaj elementy z powrotem, dopóki nie zadziała. Naprawiłem ten problem za pomocą capistrano 3.1. I kwestia na capistrano 3.3.5. – yekta

+0

@yekta pytanie zadano w 2013 r. Właśnie wtedy, gdy uruchomiono limit 3. W tym momencie łatwiej byłoby mu wrócić do wersji 2, ponieważ niewiele było pomocy. –

3

Podejrzewam, że ten problem jest spowodowany niezgodnością programu Bundler 1.3.5 z najnowszą wersją Capistrano. Spróbuj przeprowadzić aktualizację do wersji wstępnej programu Bundler: gem install bundler --pre.


Zauważyłem również, że używasz bardzo starej wersji Rails 3.2, która jest prawdopodobnie podatna na niektóre exploity bezpieczeństwa. Naprawdę gorąco polecam uaktualnienie tej wersji Railsów do czegoś nowszego, jak Rails 3.2.14.

+0

Chyba masz rację, to również podświetlony kilka problemów w moim projekcie. Aktualizacja do wersji 3.2.14 zgodnie z sugestią będzie próbować ponownie zrekultywować się po pełnej aktualizacji i wrócić do tego. – dodgerogers747

+1

To, co warto było uaktualnić, nie rozwiązało tego problemu. – Nippysaurus

3

Dla Kapistrana 3, oni polecają korzystania http://github.com/capistrano/bundler

Jest tu wspomnieć https://github.com/bundler/bundler/blob/master/lib/bundler/capistrano.rb