用一些参数运行rails runner

这个命令是我的问题:

/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 = production'作为参数,它应该是script / runner的参数。
我想这可以使用一些括号解决,但没有一个想法。

如果解决scheme没有触及(或依赖于)Rails或Linux的全球环境,则会好很多。

 /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 

script/runner器不采取一个文件的路径,而是需要一些Ruby,它将执行:

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

您可以使用环境变量来设置Rails环境,例如:

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

如果你想运行一些复杂的任务,你最好把它写成一个Rake任务。 例如,你可以创建文件lib/tasks/foo.rake

 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 

也可以将参数传递给Rake任务 。

我假设你是在一个基于script/runner的旧版Rails上,我不知道这是否适用于较老的Rails,但是在较新的Rails中,你可以只require 'config/environment' ,它会加载应用程序。 那么你可以在那里写你的脚本。

例如,我有一个脚本需要一个参数,如果提供的话就打印出来,然后打印出我的应用中有多少用户:

文件:app / 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 

调用arg简写:

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

长时间调用arg:

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