रेल 3, जो आप करना चाहते हैं वह संभवतः संभव है, लेकिन एक हैकी तरीके से। आइए जानें:
आप एक rails generate
फोन करना है, callpath इस तरह दिखता है:
rails/commands भीतर
कोड है कि उत्पन्न के लिए चलाता है:
ARGV << '--help' if ARGV.empty?
aliases = {
"g" => "generate",
"c" => "console",
"s" => "server",
"db" => "dbconsole"
}
command = ARGV.shift # <= #1
command = aliases[command] || command
case command
when 'generate', 'destroy', 'plugin', 'benchmarker', 'profiler'
require APP_PATH
Rails.application.require_environment! # <= #2
require "rails/commands/#{command}" # <= #3
रुचि के स्थानों के ऊपर गिने जा रहे हैं। अर्थात्, बिंदु #1
पर जो आदेश आप चला रहे हैं वह ARGV
से स्थानांतरित हो रहा है। आपके मामले में कौन सा मतलब है generate
कमांड लाइन तर्क से हटा दिया जा रहा है।
बिंदु #2
पर आपका पर्यावरण लोड हो जाता है, जिस बिंदु पर आपके प्रारंभिक कार्यकर्ताओं को निष्पादित किया जा रहा है। और यहां कठिन हिस्सा है - क्योंकि इस बिंदु पर एक विशिष्ट कमांड को इंगित करने वाला कुछ भी लोड नहीं किया गया है (यह #3
पर होता है) जनरेटर को चलाने के लिए कोई जानकारी नहीं है!
के जो उपलब्ध है अगर हम rails generate model meep
दौड़ा देखने के लिए config/initializer/debug.rb
में एक स्क्रिप्ट सम्मिलित करते हैं:
puts $0 #=> "script/rails"
puts ARGV #=> ["model", "meep"]
आप देख सकते हैं, वहाँ कोई प्रत्यक्ष जानकारी है कि एक जनरेटर चलाने जा रहा है है। उस ने कहा, अप्रत्यक्ष जानकारी है। अर्थात् ARGV[0] #=> "model"
। निश्चित रूप से आप संभावित जनरेटर की एक सूची बना सकते हैं और यह देखने के लिए जांच सकते हैं कि क्या जनरेटर ARGV[0]
पर कॉल किया गया है या नहीं। मेरे में जिम्मेदार डेवलपर कहता है कि यह एक हैक है और उन तरीकों से तोड़ सकता है जिनकी आप उम्मीद नहीं करेंगे इसलिए मैं इस सावधानी से उपयोग करूंगा।
एकमात्र अन्य विकल्प script/rails
को संशोधित करना है जैसा कि आपने सुझाव दिया है - जो समाधान बहुत खराब नहीं है, लेकिन जब आप रेल 4 में अपग्रेड करते हैं तो संभवतः ब्रेक हो जाएगा।
में रेल 4, आप और अधिक आशा मिल गया है! application environment is being loaded तक, जेनरेटर नेमस्पेस पहले ही लोड हो चुका है। इसका मतलब है कि प्रारंभकर्ता में आप निम्न कार्य कर सकते हैं:
if defined? Rails::Generators #=> "constant"
# code to run if generators loaded
else
# code to run if generators not loaded
end