हम रूबी के विभिन्न संस्करणों के तहत एक ही सर्वर पर रूबी प्रोजेक्ट्स पर कई रूबी बढ़ाते हैं (Nginx + Unicorn)

हेलो हैबरा

मैं आपके साथ साझा करना चाहता हूं कि एक ही सर्वर पर रेल अनुप्रयोगों पर कई रूबी को कैसे तैनात किया जाए।
यह आरवीएम, यूनिकॉर्न और नेग्नेक्स में हमारी मदद करेगा।

हाल ही में, एक ग्राहक ने रेडमीन को एक सर्वर पर रखने के लिए कहा, जिस पर रूबी ऑन रेल्स प्रोजेक्ट पहले से ही चल रहा था और रब संस्करण 1.9.2 का उपयोग कर रहा था। और रेडमीन अधिकतम रूबी-1.8.7 के साथ काम करता है। चूंकि सर्वर पर अन्य परियोजनाओं को रखने का इरादा नहीं था, इसलिए शुरू में Nginx + mod_passenger को स्थापित किया गया था। जैसा कि आप जानते हैं, एक ही सर्वर पर mod_passenger का उपयोग करके आप रूबी के विभिन्न संस्करणों के साथ दो एप्लिकेशन नहीं चलाते हैं।

आरंभ करने के लिए, चलो आरवीएम का उपयोग करके प्रत्येक प्रोजेक्ट के लिए अपना वातावरण सेट करें।
यह माना जाता है कि आरवीएम स्थापित है, यदि नहीं, तो स्थापित करें

हमें कट के दो संस्करणों की आवश्यकता है:

$ rvm install 1.9.2 $ rvm install 1.8.7 


सुविधा के लिए, हम प्रत्येक परियोजना के लिए अपने स्वयं के रत्नों का सेट बनाएंगे:

 $ rvm use 1.9.2 $ rvm gemset create project $ rvm use 1.8.7 $ rvm gemset create redmine 


तदनुसार, हम 1.9.2@project और 1.8.7@redmine सेट प्राप्त करते हैं

आरवीएम के लिए रूबी के वांछित संस्करण और रत्नों के स्वचालित रूप से स्विच करने के लिए, निम्न कार्य करें:

 $ echo "rvm use 1.9.2@project" > /home/username/www/project/.rvmrc $ echo "rvm use 1.8.7@redmine" > /home/username/www/redmine/.rvmrc 


अब कंसोल में, प्रोजेक्ट डायरेक्टरी को बदलते समय, रूबी के आवश्यक संस्करण और प्रोजेक्ट के लिए रत्नों का एक सेट स्वचालित रूप से कनेक्ट हो जाएगा।

आपको गेंडा स्थापित करने की आवश्यकता है। 3.0 से रेल संस्करण के साथ एक परियोजना के लिए, यह एक पंक्ति जोड़कर किया जाता है
 gem 'unicorn' 

परियोजना की जड़ में मणिभ और चलाने के लिए

 $ bundle install 


रेडमाइन के मामले में, आपको इस तरह से गेंडा स्थापित करने की आवश्यकता है:

 $ cd /home/username/www/redmine $ gem install unicorn 


यूनिकॉर्न (/home/username/www/redmine/config/unicorn.rb) के लिए एक प्रोजेक्ट कॉन्फिगर बनाएँ:

 worker_processes 2 working_directory "/home/username/www/redmine/" preload_app true timeout 30 listen "/home/username/www/redmine/tmp/sockets/unicorn.sock", :backlog => 64 pid "/home/username/www/redmine/tmp/pids/unicorn.pid" stderr_path "/home/username/www/redmine/log/unicorn.stderr.log" stdout_path "/home/username/www/redmine/log/unicorn.stdout.log" before_fork do |server, worker|    defined?(ActiveRecord::Base) and        ActiveRecord::Base.connection.disconnect! end after_fork do |server, worker|    defined?(ActiveRecord::Base) and        ActiveRecord::Base.establish_connection end 


हम सादृश्य द्वारा एक और परियोजना के लिए एक विन्यास बनाते हैं।

अब हमें एक डेमॉन के रूप में गेंडा चलाने की जरूरत है, प्रत्येक परियोजना के लिए हमारा अपना:

 $ cd /home/username/www/redmine $ unicorn_rails -c config/unicorn.rb -E production -D $ cd /home/username/www/project $ unicorn_rails -c config/unicorn.rb -E production -D 


यह nginx को कॉन्फ़िगर करने के लिए बना हुआ है। Nginx.conf में दो स्ट्रीम हैंडलर (प्रत्येक प्रोजेक्ट के लिए एक) जोड़ें:

 ... http {    ...    upstream project {        #     ,    unicorn.rb        server unix:/home/username/www/project/tmp/sockets/unicorn.sock;    }    upstream redmine {        server unix:/home/username/www/redmine/tmp/sockets/unicorn.sock;    } } 


तदनुसार, प्रत्येक "वर्चुअल होस्ट" से हम वांछित स्ट्रीम में एक प्रॉक्सी पास बनाते हैं, जो संबंधित यूनिकॉर्न सॉकेट का उपयोग करता है।

 server {    listen 80;    server_name project;    location / {        root /home/username/www/project/public;        if (!-f $request_filename) {            #     "project"            proxy_pass http://project;            break;        }    } } 


और

 server {    listen 80;    server_name redmine;    location / {        root /home/username/www/redmine/public;        if (!-f $request_filename) {            #     "redmine"            proxy_pass http://redmine;            break;        }    } } 


नग्नेक्स को पुनः प्रारंभ करें। हो गया।

मुझे उम्मीद है कि कोई काम आएगा और समय बचाता है।

Source: https://habr.com/ru/post/In128048/


All Articles