Running rails runner with some parameters
这个命令是我的问题:
1 2 3 | /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`. |
如果解决方案不接触(或依赖)Rails或Linux的全球环境,它会更好。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /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 |
1 | script/runner"MyClass.do_something('my_arg')" |
您始终可以使用环境变量设置Rails环境,例如:
1 | RAILS_ENV=production script/runner"MyClass.do_something('my_arg')" |
如果你想运行一些复杂的任务,最好把它写为rake任务。例如,您可以创建文件
1 2 3 4 5 6 | namespace :foo do desc 'Here is a description of my task' task :bar => :environment do # Your code here end end |
您可以执行此操作:
1 | rake foo:bar |
和
1 | RAILS_ENV=production rake foo:bar |
也可以将参数传递给rake任务。
我假设您使用的是基于
例如,我有一个脚本,它接受一个参数,打印出它是否提供,然后打印出我的应用程序中有多少用户:
文件:app/jobs/my_job.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
不带参数调用:
1 2 | $ be ruby app/jobs/my_job.rb THERE ARE 2 USERS |
用arg速记键呼叫:
1 2 3 | $ be ruby app/jobs/my_job.rb -t my_arg THE ARGUMENT WAS"my_arg" THERE ARE 2 USERS |
用一只大长手呼叫:
1 2 3 | $ be ruby app/jobs/my_job.rb --the-arg my_arg THE ARGUMENT WAS"my_arg" THERE ARE 2 USERS |