रूबी से रूबी से सिस्टम कार्यों को करने का सबसे अच्छा तरीका क्या है?

मैं एक छोटा सिस्टम प्रशासन वेब एप्लिकेशन बना रहा हूं (वेब-मिन सोचें, लेकिन आरओआर में) और मुझे अपने रूबी कोड से सिस्टम पैरामीटर तक पहुंचने में सक्षम होना चाहिए। उदाहरण के लिए, मैं उपयोगकर्ता को होस्टनाम, समय क्षेत्र या सर्वर की नेटवर्क कॉन्फ़िगरेशन बदलने की अनुमति देना चाहता हूं।

मेरे वर्तमान विचारों में एक अलग सेटुइड स्क्रिप्ट (पर्ल, रुबी, ??) है ताकि मैं इसे अपने आरओआर कोड से कॉल कर सकूं और यह क्रियाएं करेगा। यह काफी बोझिल और बहुत ही सुरुचिपूर्ण नहीं है। मैं रूबी नौसिखिया हूं और जानना चाहता हूं कि इस तरह की चीज़ को पूरा करने का एक बेहतर तरीका है या नहीं।

धन्यवाद!

0

4 उत्तर

पृष्ठभूमि कार्यों को कवर करने वाले RailsCasts एपिसोड की एक श्रृंखला थी।

आपकी समस्या के लिए सबसे उपयुक्त रूप से शायद "पृष्ठभूमि में रेक" हो सकता है, जो हो सकता है एक अच्छा प्रारंभिक बिंदु? जैसा कि नाम से पता चलता है, इसमें रेल पर रूबी से रेक कार्यों को ट्रिगर करना शामिल है।

सिस्टम-सेटिंग्स को बदलने का सबसे स्पष्ट समाधान रूट के रूप में एक डेमॉन चलाना होगा, जो कुछ (बहुत सीमित और सख्ती से sanitized) इनपुट स्वीकार करता है, जैसे नया होस्टनाम, या सर्वर के लिए नया आईपी पता .. दूसरा एपिसोड "स्टार्लिंग और वर्कलिंग" और " कस्टम डेमॉन " इससे भी मदद कर सकता है।

एक क्लीनर समाधान sudo का उपयोग करना होगा। ऐसा करने के लिए दो (समान) तरीके हैं जिन पर मैं सोच सकता हूं:

कुछ आदेशों (जैसे hostname , ifconfig ) पर sudo पहुंच को अनुमति दें जो उपयोगकर्ता को रेक कार्य चलाएगा। इसमें बड़ी सुरक्षा समस्याएं हो सकती हैं। इसका मेरा पसंदीदा उदाहरण सुडो को विम तक पहुंचने की इजाजत देता है, जो कि जब तक आप sudo vim चलाते हैं, तब तक ! Bash चलाते हैं और अचानक आपके पास मशीन पर पूर्ण-रूट पहुंच होती है पाठ संपादक के माध्यम से ..

दूसरी तरफ (सुरक्षित रूप से करना आसान है) - एक रेक कार्य (या कुछ अलग स्क्रिप्ट) है जो आवश्यक कार्यों को निष्पादित करता है (उदाहरण के लिए होस्टनाम बदल रहा है)। कहें, /usr/bin/myapp_systemtasks root: root के स्वामित्व में है, फिर उस स्क्रिप्ट तक सुडो पहुंच की अनुमति दें। सुनिश्चित करें कि स्क्रिप्ट स्वीकार करने वाले इनपुट को सुरक्षित करने के लिए आप बहुत सावधान हैं (शैल-एस्केपिंग जैसी चीज़ों को रोकने के लिए)।

तो, ऐसा करने के तरीके हैं, लेकिन दिन के अंत में आप सिस्टम-स्तरीय कॉन्फ़िगरेशन के लिए वेब-इंटरफ़ेस बना रहे हैं, जो सुरक्षित रूप से करना बहुत मुश्किल है .. जो भी आप करने का निर्णय लेते हैं, सुनिश्चित करें कि यह अच्छी तरह से परीक्षण किया गया है ( आपके द्वारा, और अन्य)

0
जोड़ा

एक व्यक्ति ने result =% x [uptime] जैसे कुछ का उपयोग करने का सुझाव दिया और मुझे यह बहुत उपयोगी ब्लॉग पोस्ट । मुझे लगता है कि यह कुछ प्रकार की रैपर स्क्रिप्ट को जोड़कर काम करने योग्य है जिसे सुडो के साथ बुलाया जाता है और इसमें सूडर्स में उपयुक्त अनुमतियां होती हैं।

0
जोड़ा

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

स्टार्लिंग के लिए एक फायदा यह है कि यह कतार को जर्नल करता है ताकि अगर समस्याएं हो तो यह कतार फिर से बना सकती है।

require 'starling'
starling = Starling.new('127.0.0.1:22122')
starling.set('my_queue', 12345)

फिर आपका कार्यकर्ता किसी भी कार्य को आसानी से हटा सकता है:

require 'starling'
loop do
  starling.get('my_queue') # this will block until something gets added to the queue
  # do stuff
end
0
जोड़ा

आप BackgrounDRb का उपयोग कर सकते हैं। इसका उद्देश्य रेल ऐप्स से कार्यों को ऑफ़लोड करना है, और आप सर्वर को किसी भिन्न उपयोगकर्ता के अंतर्गत चला सकते हैं।

0
जोड़ा
यह बहुत अच्छी जानकारी है लेकिन मुझे यकीन नहीं है कि यह मेरी समस्या हल करता है। ये कार्य लंबे समय तक नहीं चल रहे हैं और वास्तव में पृष्ठभूमि की आवश्यकता नहीं है। मेजबान का नाम बदलने के लिए बस एक अलग सर्वर भी चला रहा है थोड़ा सा ओवरकिल है।
जोड़ा लेखक Richard Hurt, स्रोत
यहां तक ​​कि ओवरकिल होने के कारण, रेल आवेदन के भीतर किसी अन्य उपयोगकर्ता को नौकरियों को जन्म देने का यह सबसे आसान तरीका है। यह प्लगइन का मुख्य उद्देश्य नहीं है, लेकिन यह नौकरी, साफ और अच्छी तरह से काम करेगा।
जोड़ा लेखक changelog, स्रोत