Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4:open()不';我不能正常工作_Ruby On Rails_Ruby_Ruby On Rails 4_Popen - Fatal编程技术网

Ruby on rails Rails 4:open()不';我不能正常工作

Ruby on rails Rails 4:open()不';我不能正常工作,ruby-on-rails,ruby,ruby-on-rails-4,popen,Ruby On Rails,Ruby,Ruby On Rails 4,Popen,我的一个模型中有以下代码行: open("|cd lib && /home/rails/jruby/bin/jruby -J-Djava.awt.headless=true -J-Xmx500m -J-Xms500m -J-Djruby.jit.logging=true jasper_order_invoice.rb #{order_id} #{db} #{user} #{pwd} > ../log/jasper.log") jasper_order_invoice.rb

我的一个模型中有以下代码行:

open("|cd lib && /home/rails/jruby/bin/jruby -J-Djava.awt.headless=true -J-Xmx500m -J-Xms500m -J-Djruby.jit.logging=true jasper_order_invoice.rb #{order_id} #{db} #{user} #{pwd} > ../log/jasper.log")
jasper_order_invoice.rb是一个调用Java JasperReports库并在tmp/中创建发票PDF的脚本。 在我引入Capistrano作为部署方法之前,它一直工作得很好。该应用程序现在处于
/home/rails/rails production/current
状态,而不是
/home/rails/app
。但是,PDF创建不再有效。未创建PDF。奇怪的是:当我直接从shell调用它,将行粘贴到
irb
,或者将行复制到一个空的.rb脚本中时,它可以在我的本地dev机器上工作,也可以在服务器上工作

我可以看到,当Rails调用Jruby时,java线程会启动大约2秒钟。这给了我足够的时间用ps-exa检查参数和环境变量。一切似乎都是正确的。订单id、db、user和pwd正在传递,env也与我直接从
irb
调用代码一样。路径也是正确的

不幸的是,当Rails调用代码时,log/jasper.log文件是空的。但奇怪的是,当我从
irb
调用它时,它确实包含输出


我不知道如何进一步调试它。我特别想看看stdout和stderr,但是我不知道为什么日志文件是空的

问题在于Capistrano设置引入了一个新的环境变量RUBYOPT。这让jRuby有些困惑。在执行jRuby帮助之前,将
export RUBYOPT=
添加到open调用。

如果是权限问题,为什么在IRB中调用它时会起作用?顺便说一句:Rails调用它时,每次调用后都会留下一个“sh(defunct)”。是的。在rails root/home/rails/rails production/current中也启动了irb/