2017-09-01 49 views
0

所以我有一個小塊的Ruby /西納特拉代碼,返回一個JSON作爲響應。代碼的工作原理和結果在WEBrick中是準確的,但是在我的Passenger/Apache設置中,相同代碼的消息是空白的。這裏是我的代碼和響應來自使用WEBrick和乘客/阿帕奇西納特拉JSON響應看起來準確的WEBrick,但在乘客不工作/阿帕奇

這裏是我的代碼

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" 
} 

而且從客運輸出/ Apache是​​

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

請記住該消息包含\ t和\ n。這些與Apache或乘客混亂嗎?

+0

乘客似乎使用另一個'ruby'和'%×[紅寶石../do-something.rb cert.cer]'返回不可預知的結果。從調試'%x [which ruby​​]'或者像Passenger下開始。 – mudasobwa

+0

好點,但是我已經檢查過,不認爲​​這是問題。事實上,這些環境使用不同的Ruby版本,但代碼在輸出到控制檯時的預期效果都是如此。 – sraj

+0

你爲什麼要拋出一個紅寶石腳本?爲什麼不需要Ruby代碼並直接運行? –

回答

0

正如其他人所說,你看到的行爲是最有可能,因爲該命令%x[ruby ../do-something.rb cert.cer]由於某種原因失敗。如果再失敗,它應該已打印的東西到stderr,這在the global Apache log file結束。請查看該文件並檢查是否可以找到相關的錯誤消息。