Rails 4:open()无法正常工作

时间:2014-01-11 20:18:24

标签: 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是一个调用Java JasperReports库并在tmp /中创建发票PDF的脚本。 在我介绍Capistrano作为部署方法之前,这曾经非常有效。该应用现在位于/home/rails/rails-production/current而不是/home/rails/app。但是,PDF创建不再起作用。没有创建PDF。奇怪的是:当我直接从shell调用它时,它可以在我的本地开发机器上运行,也可以在服务器上运行,将行粘贴到irb,或者将行复制到一个空的.rb脚本中。

我可以看到当Rails调用Jruby时,java线程启动大约2秒。它给了我足够的时间来检查ps -exa的参数和env变量。一切似乎都是正确的。正在传递order_id,db,user和pwd,并且envs也与我直接从irb调用代码的情况相同。路径也是正确的。

当Rails调用Code时,log / jasper.log文件很遗憾。但奇怪的是,当我从irb调用它时,它确实包含输出。

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

1 个答案:

答案 0 :(得分:0)

问题是Capistrano设置引入的新环境变量RUBYOPT。这在某种程度上混淆了jRuby。在执行jRuby之前将export RUBYOPT=添加到open调用帮助。