2013-10-14 7 views
13

मैं कैपिस्ट्रानो को प्राप्त करने और रेल एप्लिकेशन में पहली बार चलाने की कोशिश कर रहा हूं। मेरे पास उबंटू 12.04, nginx, यूनिकॉर्न और रेल चलने वाला एक लिनक्स सर्वर है, हालांकि, मुझे कुछ मुद्दों में चल रहा है। मैं Capistrano 3.0.0 का उपयोग कर रहा हूं, रेल 3.2.14, बंडलर 1.4.0 & रूबी 1.9.3p448 आरवीएम का उपयोग कर रहा हूं।Capistrano के लिए अपरिभाषित विधि 'उदाहरण' :: कॉन्फ़िगरेशन: कक्षा

मेरे पास केवल एक उत्पादन चरण स्थापित है और इस समय पर और मैं केवल कैपिस्ट्रानो से अपने सर्वर के साथ संवाद कर रहा हूं और मेरा कोड जिथब (अभी तक कोई माइग्रेशन और बंडलिंग इत्यादि) से दबा रहा हूं।

जब मैं कमांड cap production deploy:check या cap 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 } 

संपादित हमलावर एल को देखने के बाद बंडलर के भीतर capistrano.rb में ine यह deploy.rb को 'बंडलर/परिनियोजन' की आवश्यकता जोड़ने के लिए उल्लेख करता है, जो कैपिस्ट्रानो उदाहरण त्रुटि से छुटकारा पाने के लिए प्रतीत होता है।

नोट कैपिस्ट्रानो 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. 

ओह और अगर आप अभी तक के रूप में नहीं करना चाहते उपयोग बंडलर करते हैं, पहली पंक्ति को हटा दें : "बंडलर/कैपिस्ट्रानो" की आवश्यकता है। उस के रूप में आसान है।

इसके अलावा आप पिछले तरीके की तरह चर का उपयोग नहीं कर सकते हैं।इसे सीधे पढ़ने के बजाय, चर को पढ़ने के लिए fetch (: application) का उपयोग करें।

मैं आपके लिए capistrano v2 पर वापस जाने के लिए आसान होगा।

+0

मेरे लिए इसे धन्यवाद, धन्यवाद। – Asciant

+0

मुझे सच में नहीं लगता कि v2 पर वापस जाना आसान है। सबसे पहले कैप इंस्टॉल के साथ शुरू करने की कोशिश करने लायक है (हालांकि अपने deploy.rb, production.rb और कैपिफ़ाइल फ़ाइलों का बैक अप बनाएं!), फिर जब तक यह काम नहीं करता तब तक टुकड़े वापस जोड़ें। इसके अलावा, मैंने capistrano 3.1 का उपयोग करके इस समस्या को ठीक किया। मैं capistrano 3.3.5 पर मुद्दा। – yekta

+0

@yekta 2013 में सवाल पूछा गया था। बस जब टोपी 3 लॉन्च किया गया था। उस समय उस समय v2 पर वापस जाना आसान होता, क्योंकि बहुत मदद नहीं मिली थी। –

3

मुझे संदेह है कि यह समस्या इसलिए है क्योंकि बंडलर 1.3.5 Capistrano के नवीनतम संस्करण के साथ संगत नहीं है। बंडलर प्री-रिलीज में अपग्रेड करने का प्रयास करें: gem install bundler --pre


मैंने यह भी देखा है कि आप रेल 3.2, जो शायद कुछ सुरक्षा कारनामे के लिए असुरक्षित है की एक बहुत ही पुराने संस्करण का उपयोग कर रहे हैं। रेलवे 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

संबंधित मुद्दे