Sinatra JSON响应在WEBrick中看起来很准确,但在Passenger / Apache中不起作用

时间:2017-09-01 06:22:01

标签: ruby apache sinatra passenger webrick

所以我有一小段Ruby / Sinatra代码,它返回一个JSON作为响应。代码工作,并且结果在WEBrick中是准确的,但在我的Passenger / Apache设置中,对于相同的代码,消息是空白的。这是我的代码和来自WEBrick和Passenger / apache的回复

这是我的代码

require 'sinatra/base'
require 'json'
require 'openssl'

class MyApp < Sinatra::Base
  before do
    content_type :json
  end
  post "/" do
    payload = JSON.parse(request.body.read, :symbolize_names => true)
    raw = payload[:pem]
    pem = OpenSSL::X509::Certificate.new raw    
    File.open("cert.cer", "wb") { |f| f.print pem }
    message = %x[ruby ../do-something.rb cert.cer]
    {subject: sub_CN, message: message, success: "1" }.to_json
  end

在WEBrick中运行时的输出是

{
"subject": "mail.google.com",
"message": "This certificate is good\tcurrently valid.\nIt appears the cert 
 will expire in\t2 months.\n",
"success": "1"
 }

Passenger / Apache的输出是

{
    "subject": "mail.google.com",
    "message": "",
    "success": "1"
}

请记住邮件中包含\ t和\ n。 Apache或Passenger这些混乱吗?

1 个答案:

答案 0 :(得分:0)

正如其他人所提到的,您看到的行为很可能是因为命令%x[ruby ../do-something.rb cert.cer]由于某种原因失败了。如果失败则将某些东西打印到stderr,最终会在the global Apache log file。请查看该文件并检查是否可以找到相关的错误消息。