我的一个模型中有以下代码行:
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,但我不知道为什么日志文件是空的。
答案 0 :(得分:0)
问题是Capistrano设置引入的新环境变量RUBYOPT。这在某种程度上混淆了jRuby。在执行jRuby之前将export RUBYOPT=
添加到open调用帮助。