2009-02-26 17 views
63

तदर्थ रेल कार्यों के लिए हम कुछ कार्यान्वयन विकल्प है, जो बीच में प्रमुख होने लगते हैं:मेरे पास एक रेल कार्य है: क्या मुझे स्क्रिप्ट/धावक या रेक का उपयोग करना चाहिए?

script/runner some_useful_thing 

और:

rake some:other_useful_thing 

कौन-सा विकल्प मैं पसंद करना चाहिए? यदि कोई स्पष्ट पसंदीदा है तो, यदि कभी, तो क्या मुझे दूसरे का उपयोग करने पर विचार करना चाहिए? यदि कभी नहीं, तो आप क्यों मानेंगे कि यह अभी भी बिना किसी चेतावनी चेतावनी के ढांचे में मौजूद है?

उत्तर

56

उन दोनों के बीच अंतर यह है कि script/runner जूते रेल जबकि एक रैक कार्य नहीं जब तक आप इसे काम करके बताने :environment पर निर्भर करता है इस तरह, यह है:

task :some_useful_task => :environment do 
    # do some useful task 
end 

चूंकि रेल बूटिंग महंगा है, इसलिए यदि आप इससे बच सकते हैं तो यह छोड़ने योग्य हो सकता है।

इसके अलावा, वे लगभग बराबर हैं। मैं दोनों का उपयोग करता हूं, लेकिन हाल ही में मैंने script/runner को एक स्क्रिप्ट को अलग से निष्पादित किया है।

2

एक ऑफ कमांड स्क्रिप्ट/धावक के लिए ठीक हो सकता है। कुछ भी दोहराए जाने के लिए, लंबे समय तक एक रेक कार्य आसान होता है, और यदि आप भूल जाते हैं कि यह क्या करता है तो सारांश होता है।

2

मुझे इंप्रेशन स्क्रिप्ट/धावक मुख्य रूप से आवधिक कार्यों के लिए मिला था। उदाहरण के लिए, चलाता है कि एक क्रॉन जॉब:

SomeClass.update_from_web('http://www.sourcefordata.gov/') 
+0

मैंने 'धावक' कार्य के बारे में कुछ भी नहीं देखा है या इसका तात्पर्य है कि यह मुख्य रूप से क्रॉन नौकरियों के लिए है। इसके बजाय, मैं उन कार्यों के लिए धावक मानता हूं जिनके पास रेल प्रस्तुति परत की आवश्यकता नहीं है लेकिन डीबी और मॉडलों तक पहुंच चाहते हैं, और मैं नियंत्रक या मॉडल में नहीं डालूंगा क्योंकि इसे वहां रखने का कोई मतलब नहीं है। –

5

एक चीज जो मैंने किया है वह सिर्फ सामान्य रूबी स्क्रिप्ट लिखता है और उन्हें script/maintenance निर्देशिका में डाल देता है।

रेलों को लोड करने और अपने सभी मॉडलों तक पहुंच प्राप्त करने के लिए आपको केवल अपनी फाइल के शीर्ष पर require '../../config/environment.rb' डाल दिया गया है, तो आप दूर हैं।

+0

क्या इसे रेक कार्यों में रखने के लिए और अधिक समझदारी नहीं होगी? –

+1

रेक रेक की अतिरिक्त जटिलता से परेशान क्यों है। इस तरह हमारे पास सिर्फ एक फ़ाइल है जो किसी भी अन्य स्क्रिप्ट की तरह * * निक्स सिस्टम –

+4

^^ पर स्पष्टीकरण के लिए चला सकती है: रेक बहुत अच्छा है, और यदि आप निर्भरताओं की आवश्यकता होती है, तो मैं इसका उपयोग करूंगा, लेकिन यदि आप नहीं करते हैं, –

10

FWIW वहाँ रेक के पक्ष में कुछ movement away from using script runner हो रहा है:

अद्यतन (2009/04/25): मैं रेक कार्य के रूप में कार्य आवर्ती के लिए स्क्रिप्ट/धावक के लिए विरोध का उपयोग करें।

इसके अलावा, per this post के रूप में आप ठीक कार्य आवर्ती के लिए रेक का उपयोग कर सकते हैं:

अगर मैं तो यह आधी रात को मेरी उत्पादन डेटाबेस पर हर रात को चलाने के लिए चाहता था, मैं एक cronjob कि तरह दिखता है लिख सकते हैं इस:

0 0 * * * सीडी/var/www/क्षुधा/rails_app/& &/usr/स्थानीय/bin/रेक RAILS_ENV = उत्पादन utils: send_expire_soon_emails

+2

आपका पहला लिंक मर चुका है, यह सुनिश्चित नहीं है कि लेख हटा दिया गया है या सिर्फ ब्लॉग पुनर्व्यवस्थित है। – gravitystorm

+2

मुझे यकीन नहीं है कि एक ब्लॉग पोस्ट (जो दुख की बात है कि इसके रेक-बनाम धावक के दावे के कारणों की व्याख्या नहीं है) वास्तव में एक आंदोलन के रूप में गिना जाता है। –

9

टिप्पणी 2 के आधार पर सुधारित। उन्हें कर्म दो!

एफडब्ल्यूआईडब्ल्यू - रेल 3.0+ बदलता है कि आप एक स्टैंडअलोन स्क्रिप्ट में रेल सिस्टम को कैसे प्रारंभ करते हैं।

require File.dirname(__FILE__) + '/config/environment' 

आप जैसा कि ऊपर उल्लेख भी कर सकते हैं:

rails runner script/<script name> 

या एक रैक कार्य में सभी कोड डाल दिया, लेकिन मैं रेल 2 से विरासत कोड का एक बहुत कुछ है, इसलिए मैं उस रास्ते को तुरंत नीचे नहीं जाना चाहता था।

प्रत्येक के पास इसके फायदे और नुकसान हैं।

3

रेल 3.0+ में, config/environment.rb को config/application.rb की आवश्यकता है, जिसके लिए config/boot.rb आवश्यक है।

तो, रेल 3 में एक ऐप्लिकेशन लोड करने के लिए, आप अभी भी केवल एक रेक कार्य करने के लिए environment.rb

9

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

यदि आपके कार्य को कमांड लाइन तर्कों को गर्वपूर्वक संभालने की आवश्यकता है तो एक स्क्रिप्ट लिखना एक तरीका है।

ल्यूक फ्रैंकल ने स्क्रिप्ट/धावक रेल को बूट करने का उल्लेख किया। यह सच है। लेकिन अगर आप रेल को बूट नहीं करना चाहते हैं तो स्क्रिप्ट/धावक के बिना स्क्रिप्ट चलाएं। तो स्क्रिप्ट और रेक कार्यों के बीच एकमात्र वास्तविक अंतर उनके सौंदर्यशास्त्र हैं। जो भी आपको सही लगता है चुनें।

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

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