2012-03-05 6 views
16

मैं अपने स्थानीय मशीन से कैपिस्ट्रानो के माध्यम से उत्पादन सर्वर पर रेल कंसोल दर्ज करना चाहता हूं। मुझे कुछ गिस्ट मिले, उदा। https://gist.github.com/813291 और जब मैं के माध्यम सेकैपिस्ट्रानो के माध्यम से उत्पादन पर रेल कंसोल कैसे दर्ज करें?

cap production console 

मैं निम्नलिखित परिणाम

192-168-0-100:foldername username $ cap console RAILS_ENV=production 
    * executing `console' 
    * executing "cd /var/www/myapp/current && rails console production" 
    servers: ["www.example.de"] 
    [www.example.de] executing command 
    [www.example.de] rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell '1.9.3' -c 'cd /var/www/myapp/current && rails console production' 
/var/www/myapp/releases/20120305102218/app/controllers/users_controller.rb:3: warning: already initialized constant VERIFY_PEER 
Loading production environment (Rails 3.2.1) 
Switch to inspect mode. 

और यह thats ... अब मैं कुछ पाठ दर्ज कर सकते हैं, लेकिन कुछ नहीं होता ...

है मिल कंसोल में प्रवेश किसी को भी यह विचार है कि उस समस्या को कैसे प्राप्त करें या मेरी समस्या के लिए एक और समाधान?

+1

यह आपकी मदद कर सकता है: http://stackoverflow.com/questions/4347811/is-there-a-way-to-use-capistrano-or-similar-to-remotely-interact-with-rails- सह – Awea

उत्तर

0

मैंने उस दृष्टिकोण के साथ भी झुकाया है, लेकिन फिर अपने स्वयं के इंटरैक्टिव एसएसएच शैल क्लाइंट के निर्माण से परहेज करने का प्रयास किया और बस this snippet के साथ चला गया, मैंने पाया कि बस पुराने पुराने एसएसएच का उपयोग करता है। यह उपयुक्त नहीं हो सकता है यदि आपके पास कुछ अजीब एसएसएच गेटवे प्रॉक्सी चल रहा है, लेकिन एक बॉक्स में लॉग इन करने और कुछ परिचालन करने के लिए, यह एक आकर्षण की तरह काम करता है।

0

मेरे अनुभव में, कैपिस्ट्रानो इंटरैक्टिव टर्मिनल के साथ बहुत अच्छी तरह से काम करने के लिए नहीं बनाया गया है।

आप एक से अधिक टर्मिनलों में चीजों को निष्पादित करने के लिए है, तो मैं iterm सुझाव देंगे, जो एक "सभी विंडो को भेजें" समारोह है कि मेरे लिए बहुत अच्छी तरह से काम करता है:

http://www.iterm2.com/#/section/home

10

मैं जोड़ दिया है बात इस तरह का के लिए अपने खुद के कार्यों:

namespace :rails do 
    desc "Remote console" 
    task :console, :roles => :app do 
    run_interactively "bundle exec rails console #{rails_env}" 
    end 

    desc "Remote dbconsole" 
    task :dbconsole, :roles => :app do 
    run_interactively "bundle exec rails dbconsole #{rails_env}" 
    end 
end 

def run_interactively(command) 
    server ||= find_servers_for_task(current_task).first 
    exec %Q(ssh #{user}@#{myproductionhost} -t '#{command}') 
end 

मैं अब cap rails:console कहना है और एक सांत्वना मिलता है।

0

मेरे पास कुछ मुश्किल वातावरण है, जो प्रवाह है ... तो bash -lc अभी वास्तव में एक विकल्प नहीं है। मेरा समाधान @ रोक्को के समान है, लेकिन यह थोड़ा और परिष्कृत है।

# run a command in the `current` directory of `deploy_to` 
def run_interactively(command) 
    # select a random server to run on 
    server = find_servers_for_task(current_task).sample 
    # cobble together a shell environment 
    app_env = fetch("default_environment", {}).map{|k,v| "#{k}=\"#{v}\""}.join(' ') 
    # Import the default environment, cd to the currently deployed app, run the command 
    command = %Q(ssh -tt -i #{ssh_options[:keys]} #{user}@#{server} "env #{app_env} bash -c 'cd #{deploy_to}/current; #{command}'") 
    puts command 
    exec command 
end 

namespace :rails do 
    desc "rails console on a sidekiq worker" 
    task :console, role: :sidekiq_normal do 
    run_interactively "bundle exec rails console #{rails_env}" 
    end 
end 
2

एक साधारण Capistrano 3 समाधान हो सकता है:

namespace :rails do 
    desc "Run the console on a remote server." 
    task :console do 
    on roles(:app) do |h| 
     execute_interactively "RAILS_ENV=#{fetch(:rails_env)} bundle exec rails console", h.user 
    end 
    end 

    def execute_interactively(command, user) 
    info "Connecting with #{user}@#{host}" 
    cmd = "ssh #{user}@#{host} -p 22 -t 'cd #{fetch(:deploy_to)}/current && #{command}'" 
    exec cmd 
    end 
end 

तो फिर तुम यह कहना कॉल कर सकते हैं मचान पर, के साथ: cap staging rails:console। मज़े करो!

+0

समस्या यह है कि जब आपके पास सर्वर सूची में एक से अधिक सर्वर हैं, तो यह कार्य ^^^ उन सभी में कंसोल खोलने का प्रयास करेगा। : / –

5

Capistrano 3 के लिए आप अपने config/deploy में इन पंक्तियों में जोड़ सकते हैं:

cap [staging] rails:console 

सर्वर सूची में दूसरे सर्वर खोलने के लिए:

namespace :rails do 
    desc 'Open a rails console `cap [staging] rails:console [server_index default: 0]`' 
    task :console do  
    server = roles(:app)[ARGV[2].to_i] 

    puts "Opening a console on: #{server.hostname}...." 

    cmd = "ssh #{server.user}@#{server.hostname} -t 'cd #{fetch(:deploy_to)}/current && RAILS_ENV=#{fetch(:rails_env)} bundle exec rails console'" 

    puts cmd 

    exec cmd 
    end 
end 

सर्वर सूची में पहले सर्वर खोलने के लिए:

cap [staging] rails:console 1 

संदर्भ: Opening a Rails console with Capistrano 3

exec वर्तमान प्रक्रिया को प्रतिस्थापित करने के लिए आवश्यक है, अन्यथा आप रेल कंसोल के साथ बातचीत करने में सक्षम नहीं होंगे।

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