这个命令是我的问题:
/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的参数。
我想这可以用一些括号来解决,但没有一个想法。
如果解决方案不涉及(或不依赖于)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
3条答案
按热度按时间bq3bfh9z1#
script/runner
不接受文件的路径,而是接受它将要执行的一些Ruby:您可以使用环境变量设置Rails环境,例如:
如果你想运行一些复杂的任务,你最好把它写成一个Rake任务。例如,您可以创建文件
lib/tasks/foo.rake
:您可以使用以下命令执行此操作:
与
script/runner
一样,您可以使用环境变量设置环境:也可以是pass arguments to a Rake task。
dwthyt8l2#
我假设你使用的是基于
script/runner
的旧版Rails,我不知道这是否适用于旧版Rails,但在新版Rails中,你可以只使用require 'config/environment'
,它就会加载应用程序。然后你就可以在里面写剧本了。例如,我有一个脚本,它接受一个参数,如果提供了参数,则将其打印出来,然后打印出我的应用中有多少用户:
文件:app/jobs/my_job.rb
不带args的调用:
使用arg速记调用:
用arg long-hand调用:
xzabzqsa3#
只需使用以下语法:
您的ruby文件将接收
ARGV
变量中的参数,该变量的类型为数组。