为什么Rails在启动时会自行执行?

时间:2011-11-04 18:03:23

标签: ruby ruby-on-rails-3

我正在查看Rails 3的代码。在启动过程中加载的rails/cli.rb中,它调用Rails::ScriptRailsLoader.exec_script_rails!,然后通过重新加载来替换当前的ruby进程。通过调用exec第二次申请:

exec RUBY, SCRIPT_RAILS, *ARGV if in_rails_application?

我对Rails代码库并不熟悉,所以我的问题是这个的基本原理是什么?为什么Rails不会继续在同一个原始进程中启动?我确信有充分的理由,我只是不知道。

1 个答案:

答案 0 :(得分:2)

我认为这个想法是'rails'作为命令行可执行文件以两种方式使用:

  • 初始化应用程序(在Rails应用程序之外)
  • 为应用程序做事(ex启动服务器 - 在Rails应用程序目录中)

例如,在rails app之外:

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

在rails app中:

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

看起来exec_script_rails!用于选择rails命令向用户显示的接口。这个comment并查看ScriptRailsLoader表明,如果用户位于rails应用程序内,该方法仅调用exec - 特别是存在'script / rails'的目录。在这种情况下,exec用'script / rails'替换原始进程以使它们等效:

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

否则脚本将继续执行相同的过程。因此,理由是它允许'rails'命令以特定于上下文的方式运行,以保留'script / rails'所做的任何事情。