So I have a small piece of Ruby/Sinatra code that returns a JSON as the response. The code works and the result is accurate in WEBrick, but in my Passenger/Apache setup the message is blank for the same code. Here is my code and response from WEBrick and Passenger/apache
Here is my code
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
And the output when this is run in WEBrick is
{
"subject": "mail.google.com",
"message": "This certificate is good\tcurrently valid.\nIt appears the cert
will expire in\t2 months.\n",
"success": "1"
}
And the output from Passenger/Apache is
{
"subject": "mail.google.com",
"message": "",
"success": "1"
}
please keep in mind the message contains \t and \n. Do these mess with Apache or Passenger?
As others have mentioned, the behavior you're seeing is most likely because the command
%x[ruby ../do-something.rb cert.cer]
failed for some reason. If it failed then it should have printed something to stderr, which ends up in the global Apache log file. Please look in that file and check whether you can find the relevant error messages.