2012-09-14 8 views
9

साथ धावक यह आदेश मेरी समस्या है:रनिंग रेल कुछ मानकों

/usr/local/bin/ruby **script/runner** --environment=production app/jobs/**my_job.rb** -t my_arg 

`my_job.rb` is my script, which handles command line arguments. In this case it is `-t my_arg`. 

my_job.rb भी अपने तर्क है, जो स्क्रिप्ट/धावक के तर्क होना चाहिए के रूप में `--environment = उत्पादन 'लेता है।
मुझे लगता है कि इसे कुछ कोष्ठक का उपयोग करके हल किया जा सकता है, लेकिन कोई विचार नहीं है।

यदि समाधान रेल या लिनक्स के वैश्विक पर्यावरण को स्पर्श नहीं करता है (या निर्भर करता है), तो यह बहुत बेहतर होगा।

/usr/local/lib/ruby/1.8/optparse.rb:1450:in `complete': invalid option: --environment=production (OptionParser::InvalidOption) 
    from /usr/local/lib/ruby/1.8/optparse.rb:1448:in `catch' 
    from /usr/local/lib/ruby/1.8/optparse.rb:1448:in `complete' 
    from /usr/local/lib/ruby/1.8/optparse.rb:1261:in `parse_in_order' 
    from /usr/local/lib/ruby/1.8/optparse.rb:1254:in `catch' 
    from /usr/local/lib/ruby/1.8/optparse.rb:1254:in `parse_in_order' 
    from /usr/local/lib/ruby/1.8/optparse.rb:1248:in `order!' 
    from /usr/local/lib/ruby/1.8/optparse.rb:1339:in `permute!' 
    from /usr/local/lib/ruby/1.8/optparse.rb:1360:in `parse!' 
    from app/jobs/2new_error_log_rt_report.rb:12:in `execute' 
    from app/jobs/2new_error_log_rt_report.rb:102 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `eval' 
    from /home/www/maldive/admin/releases/20120914030956/vendor/rails/railties/lib/commands/runner.rb:46 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 
    from script/runner:3 

उत्तर

5

script/runner एक फाइल करने के लिए एक रास्ता नहीं ले करता है, बजाय इसे कुछ रूबी लेता है कि यह निष्पादित करेंगे:

script/runner "MyClass.do_something('my_arg')" 

तुम हमेशा के लिए एक वातावरण चर का उपयोग कर रेल वातावरण सेट कर सकते हैं, उदाहरण के लिए:

RAILS_ENV=production script/runner "MyClass.do_something('my_arg')" 

यदि आप कुछ जटिल कार्य चलाना चाहते हैं, तो आप इसे रेक कार्य के रूप में लिखने से बेहतर हो सकते हैं।

namespace :foo do 
    desc 'Here is a description of my task' 
    task :bar => :environment do 
    # Your code here 
    end 
end 

आप के साथ इस पर अमल होगा::

rake foo:bar 

और script/runner साथ के रूप में आप एक वातावरण चर का उपयोग कर पर्यावरण सेट कर सकते हैं:

RAILS_ENV=production rake foo:bar 
उदाहरण के लिए, आप फ़ाइल lib/tasks/foo.rake बना सकते हैं

यह भी संभव है pass arguments to a Rake task

4

मुझे लगता है कि आप script/runner पर आधारित पुराने रेल पर हैं, मुझे नहीं पता कि यह पुराने रेल के लिए काम करता है या नहीं, बल्कि नए रेल में, आप केवल require 'config/environment' कर सकते हैं, और यह ऐप लोड करेगा। फिर आप वहां अपनी स्क्रिप्ट लिख सकते हैं।

उदाहरण के लिए, मैं एक स्क्रिप्ट है कि एक तर्क लेता है, इसे बाहर प्रिंट अगर यह प्रदान की गई थी, और उसके बाद बाहर प्रिंट कितने उपयोगकर्ताओं ने मेरे एप्लिकेशन में हैं:

फ़ाइल: एप्लिकेशन/jobs/my_job.rb

require 'optparse' 

parser = OptionParser.new do |options| 
    options.on '-t', '--the-arg SOME_ARG', 'Shows that we can take an arg' do |arg| 
    puts "THE ARGUMENT WAS #{arg.inspect}" 
    end 
end 

parser.parse! ARGV 

require_relative '../../config/environment' 

puts "THERE ARE #{User.count} USERS" # I have a users model 

कोई आर्ग के साथ कॉलिंग:

$ be ruby app/jobs/my_job.rb 
THERE ARE 2 USERS 

एक आर्ग आशुलिपि के साथ कॉलिंग:

$ be ruby app/jobs/my_job.rb -t my_arg 
THE ARGUMENT WAS "my_arg" 
THERE ARE 2 USERS 

एक आर्ग लंबे समय से हाथ के साथ कॉलिंग:

$ be ruby app/jobs/my_job.rb --the-arg my_arg 
THE ARGUMENT WAS "my_arg" 
THERE ARE 2 USERS 
संबंधित मुद्दे