2015-05-12 31 views
1

我正在寫一個紅寶石寶石,我希望能夠區分是否在http服務器下使用gem(即作爲rails框架的一部分被調用)或者如果ruby gem是從獨立腳本調用的,比如ruby test_script.rb 。有可能確定ruby代碼塊是在http服務器下執行還是作爲獨立腳本執行?

我知道我可以檢查某些ENV變量,如'REMOTE_ADDR','HTTP_REFERER'以決定它是源自Web應用程序還是獨立腳本。但顯然它不會是正確的,所以只是想知道是否有更好的方法來檢查是否在http服務器下執行ruby代碼塊。

感謝

+1

'UNDER_RAILS = Kernel.const_defined? 'Rails'' – mudasobwa

+0

是的,我可以這樣做,但那隻針對rails而已,其他框架呢?因爲其他框架肯定不會使用這個變量,因此正在尋找更適用於大多數框架的通用解決方案,所以每次有新框架時都不必更新代碼庫。感謝 –

回答

1

您可以檢查是否Ruby腳本被命令行上通過,如果當前文件名正在執行的文件的名稱匹配檢查運行(或沒有)。

if __FILE__ == $0 
    # ruby gem_name.rb 
    puts "On the command line" 
else 
    # require 'gem_name' 
    puts "Gem has been required" 
end 
+0

不幸的是,它不會做我想要的。如果我使用__FILE__裏面的紅寶石寶石文件,它只會給我我已經知道的文件名。它不會告訴任何東西,如果它運行在http服務器或不。 –

相關問題