2013-01-14 63 views
2

什麼是Ruby約定用於確定您是否在CLI中運行(如PHP中的php_sapi_name函數)與處理HTTP請求?Ruby相當於php_sapi_name

我想我可以測試是否定義了請求或其他推理方法,但是我必須遵循一個約定。

+0

你定義的CLI是什麼?只是IRB? HTTP請求怎麼樣 - 你只關心Rack嗎? –

+0

這是一個很好的澄清問題。我有後臺基於ActiveRecord/Rails的「批處理」作業,不是以用戶爲中心的(不需要用戶上下文),但仍然以Railsy的方式運行。他們不是IRB。事實上,如果它不是一個Web觸發的請求 - 我想用它作爲二進制確定。在未來,他們也可能作爲Rake工作發起。 – TJChambers

回答

1

這裏沒有標準化的方法,因爲Ruby是一種腳本語言,可能嵌入或不嵌入Web服務器進程。它也可能作爲一個不連貫的後臺進程運行,儘管它不一定是面向網絡的。

在HTTP環境中,您通常會定義變量如ENV['SERVER_NAME']CGI specification中的其他變量。這些不會出現在命令行環境中。

通常,最好測試一下您是否在Rack或Rails中運行,或者使用任何特定的Web框架來與HTTP層進行接口。例如,defined?(Rails)將指示Rails是否已加載,但對於rake任務和rails console類型的用法也會如此。