2011-11-04 46 views
2

我正在查看Rails 3的代碼。在啓動過程中加載的rails/cli.rb中,它調用了Rails::ScriptRailsLoader.exec_script_rails!,然後通過調用exec再次加載應用程序來替換當前的ruby進程:爲什麼Rails在啓動時自行執行?

exec RUBY, SCRIPT_RAILS, *ARGV if in_rails_application? 

我不熟悉Rails代碼庫,所以我的問題是這是什麼理由?爲什麼Rails不能在同一個原始過程中繼續啓動?我確信有一個很好的理由,我只是不知道。

回答

2

我認爲這個想法是,「軌」作爲命令行可執行文件兩種方式使用:

  • 初始化應用程序(Rails應用程序之外)
  • 做的事情爲一個應用程序(前推出的服務器 - Rails應用程序目錄內)

例如,一個Rails應用程序之外:

$ rails -h 
Usage: 
    rails new APP_PATH [options] 
... 

而且一個Rails應用程序內:

$ rails -h 
Usage: rails COMMAND [ARGS] 
... 

看起來exec_script_rails!用來挑哪個接口rails命令呈現給用戶。這commentScriptRailsLoader看看建議該方法只調用exec如果用戶在一個軌道應用程序內 - 特別是一個目錄'腳本/軌道'存在。在這種情況下,EXEC替換'腳本/ Rails的原始過程,使這些等價的:

$ rails ... 
$ ruby script/rails ... 

否則腳本將繼續在相同的過程。所以理由是它允許'rails'命令以特定於上下文的方式運行,從而保留'script/rails'所做的任何操作。