2014-10-12 7 views
5

जब भी मैं रुबी और इसकी जेमलिस्ट को आरवीएम और कैपिस्ट्रानो का उपयोग कर अद्यतन करता हूं तो मैं यात्री द्वारा उपयोग किए गए रूबी संस्करण को कैसे अपडेट करूं? यह जांचने का सबसे अच्छा तरीका क्या है कि मेरा ऐप सही रूबी संस्करण और रत्न का उपयोग कर रहा है या नहीं?रुबी संस्करण 2.1.2 में अपग्रेड किया गया, यात्री अभी भी 1.9.3

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

पहले मेरे ऐप रूबी 1.9.3-p194

मैं RVM का उपयोग माणिक संस्करणों का प्रबंधन करने के दोनों स्थानीय और सर्वर पर साथ ऑन रेल्स 3.2.16 रूबी चल रहा था। रूबी-2.1.2 स्थापित करने के बाद और मूल रत्न अपडेट किया (बंडलर, नोकोगिरी, आदि ...) मैंने अपने आवेदन के लिए अपना नया रत्न बनाया।

विकास (स्थानीय रूप से) में रूबी 2.1.2, रेल 3.1.1 9 (इससे पहले कि मैं रेल 4 में अपग्रेड करता हूं) और इस प्रोजेक्ट के लिए एक विशिष्ट रत्न का उपयोग करता हूं।

मैं Capistrano के लिए मेरे deploy.rb संशोधित, निम्नलिखित RVM-Capistrano gem Integration

require "rvm/capistrano" 
require "bundler/capistrano" 

set :user, "myusername" 
set :application, "myapp" 

set :deploy_to, "/home/#{user}/apps/#{application}" 
set :scm, :git 
set :repository, "[email protected]:myusername/#{application}.git" 
set :branch, "master" 
set :rvm_ruby_string, :local    # use the same ruby as used locally for deployment 
set :rvm_autolibs_flag, "read-only"  # more info: rvm help autolibs 
set :use_sudo, false 
set :deploy_via, :remote_cache 
set :keep_releases, 3 
default_run_options[:pty] = true 
set :ssh_options, { :forward_agent => true } 

before 'deploy:setup', 'rvm:install_rvm' # install/update RVM 
before 'deploy:setup', 'rvm:install_ruby' # install Ruby and create gemset 

after "deploy:restart", "deploy:cleanup" 
after "deploy", "rvm:trust_rvmrc" 

namespace :deploy do 
    task :start do ; end 
    task :stop do ; end 
    task :restart, :roles => :app, :except => { :no_release => true } do 
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" 
    end 

    # ... some more tasks for assets and symlinks 

end 

namespace :rvm do 
    task :trust_rvmrc do 
    run "rvm rvmrc trust #{release_path}" 
    end 
end 

मैं तो cap deploy

मैं अपने वेब पृष्ठ ताज़ा किया गया, और यात्री निम्न त्रुटियों फेंकता है:

It looks like Bundler could not find a gem. Maybe you didn't install all the gems that this application needs. To install your gems, please run: 

bundle install 
... 
Could not find rake-10.3.2 in any of the sources (Bundler::GemNotFound) 
/home/myusername/.rvm/gems/[email protected]/gems/bundler-1.5.3/lib/bundler/spec_set.rb:92:in `block in materialize' 
... 
Ruby interpreter command 
/home/myusername/.rvm/gems/ruby-1.9.3-p194/wrappers/ruby 

तो जाहिरा तौर पर यात्री अभी भी रुबी-1.9.3 चला रहा है और रूबी-2.1.2 नहीं। मुझे यकीन नहीं है कि आरवीएम-कैपिस्ट्रानो ने रुबी संस्करण और उपयुक्त रत्न को स्थापित/अपडेट किया है या नहीं। मुझे यकीन नहीं है कि मुझे क्या याद आया?

संपादित करें: मैं /opt/nginx/conf/nginx.conf

में जड़ उपयोगकर्ता के रूप में nginx.conf जाँच की फ़ाइल के शीर्ष पर मैं

... 

http { 
    passenger_root /home/myusername/.rvm/gems/ruby-1.9.3-p194/gems/passenger-4.0.37; 
    passenger_ruby /home/myusername/.rvm/gems/ruby-1.9.3-p194/wrappers/ruby; 

... 

server { 
    listen 80; 
    server_name XXX.XXX.XX.XX myapp.com www.myapp.com *.myapp.com; 
    root /home/myusername/apps/myapp/current/public; 
    passenger_enabled on; 
    client_max_body_size 4G; 
} 

करता है इसका मतलब यह है कि मैं ruby- साथ इन पंक्तियों बदलना होगा पाया 2.1.2? क्या इस बदलाव को स्वचालित करने का कोई तरीका है?

अद्यतन 2: मैं nginx.conf

http { 
     passenger_root /home/myusername/.rvm/gems/[email protected]/gems/passenger-4.0.53; 
     passenger_ruby /home/myusername/.rvm/gems/[email protected]/wrappers/ruby; 

संशोधित और मेरे deploy.rb में मैं स्पष्ट रूप से gemset है [email protected]

set :rvm_ruby_string, "[email protected]" 

एप्लिकेशन ठीक चल रहा है उपयोग करने के लिए कहता हूं, रूबी दुभाषिया है अभी भी 1.9.3। मैं भी एक व्यवस्थापक पेज RUBY_VERSION निरंतर पर मुद्रित, और यह 1.9.3

मुझे समझ नहीं आता प्रदर्शित करता है ...

धन्यवाद आपकी मदद के

उत्तर

2

आप एक से अधिक गहरे लाल रंग का द्वारा प्रबंधित संस्करणों का उपयोग कर सकते हैं के लिए यदि आप यात्री 4 या उससे ऊपर का उपयोग करते हैं तो आरवीएम।

यहाँ आप गाइड

http://rvm.io/integration/passenger
https://www.phusionpassenger.com/documentation/Users%20guide%20Nginx.html
https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html

यह यात्री स्थापित चलाने/अपने सर्वर में उन्नत करने के लिए है कि तरह लग रहा है के लिए कुछ लिंक हैं तो आप rvmsudo -s पहले

चलाने के लिए है
+0

आपके उत्तर के लिए धन्यवाद। यात्री-nginx मॉड्यूल पहले से ही स्थापित है और दोनों चल रहे हैं। रुबी 1.9.3 पर, मेरे पास यात्री मणि 4.0.37 है, और रूबी 2.1.2 पर मेरे पास यात्री मणि 4.0.53 है। समस्या तब होती है जब मैं अपने deploy.rb capistrano फ़ाइल में 1.9.3-p194 के अलावा एक अलग रूबी संस्करण के साथ बदलता हूं, फिर इसे तैनात करता हूं, यात्री त्रुटियों का एक समूह भेजता है। –

2

आपको नए आरएमवी संदर्भ से वास्तव में नया यात्री मॉड्यूल स्थापित करने के लिए passenger-install-nginx-module चलाया जाना चाहिए। अधिक यहाँ जानकारी:

https://www.phusionpassenger.com/documentation/Users%20guide%20Nginx.html#run_passenger_installer

Nginx अन्य वेब सर्वर से एक अलग है कि यह लोड करने योग्य मॉड्यूल का समर्थन नहीं करता। Nginx का विस्तार करने का एकमात्र तरीका यह पूरी तरह से स्रोत से पुन: संकलित करना है। चूंकि फ़्यूज़न पैसेंजर में कुछ बाहरी एक्जिक्यूटिव और प्लस एनग्न्क्स मॉड्यूल शामिल हैं, इसलिए आपको पहले फ़्यूज़न पैसेंजर इंस्टॉल करते समय Nginx को दोबारा जोड़ना होगा, लेकिन Nginx को अपग्रेड करते समय या फ़्यूज़न पैसेंजर संस्करण को अपग्रेड करते समय भी।

तो, मैन्युअल रूप से nginx कॉन्फ़िगरेशन को बदलने के लिए पर्याप्त नहीं है, आपको यात्री इंस्टॉलर को चलाना चाहिए जिसे nginx को सही तरीके से स्थापित करने की देखभाल करनी चाहिए (यानी आवश्यकतानुसार पुन: संकलित करना)। मैं आमतौर पर अपाचे यात्री मॉड्यूल का उपयोग करता हूं और अपग्रेड के बाद हमेशा यात्री इंस्टॉलर चलाता हूं। यात्री इंस्टॉलर चलाने से पहले rvm use [email protected] चलाने के लिए बस सुनिश्चित करें।

+0

1. आरवीएम के साथ नया संस्करण स्थापित करें, इसे डिफ़ॉल्ट पर सेट करें 2. नए रूबी संस्करण 3 को इंगित करने के लिए conf संपादित करें। इस कमांड को चलाएं। सही बात? क्या मुझे pasenger-install-nginx-module पर rvmsudo का भी उपयोग करना चाहिए? – Jepzen

+0

@ जेप्ज़न हां, यह सही लगता है। यदि आपको लक्षित डीआईआरएस तक रूट पहुंच की आवश्यकता है, तो आप rvmsudo का उपयोग कर सकते हैं, हां। – kroky

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