在 shell 环境下,运行
which rails
会得到如下结果
/home/hexudong/.rvm/gems/ruby-1.9.2-p320/bin/rails
此rails与 Rails Project 下的script/rails有何区别?
rails
script/rails
每个项目有自己的配置,home 下的是你的用户配置
这个问题有些意思,我大概分析了下加载 rails 的过程,在 Rails Project 下的 rails 是用来加载当前项目下的服务的,而 bin/rails 会加载 gems/railties-3.2.7 下的 application.rb 最终根据参数加载 server.rb generator.rb 等。。。
bin/rails
gems/railties-3.2.7
总结下输入 rails 后的动作:
exec
railties
#2 楼 @lyfi2003 :-),分析的很深入啊
#3 楼 @chucai 等飞机,无聊就看了下,其实还可能有些细节有出入,有兴趣的人可以纠正或补充~
补充一些,也是我前段时间折腾出的心得,分享给大家: 其实这里面有三个 rails 可执行文件 一个是 /home/hexudong/.rvm/gems/ruby-1.9.2-p320/bin/rails, 他其实是非常重要的一个东西,他会检查你当前是否存在 Gemfile, 如果存在就找到 Gemfile 里面相关的 railtie,若没有就用最新的 rails 版本。找到相应的 railtie 版本后找到第二个可执行 rails,比如/home/zgm/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.5/bin/rails 这个,是因为我在执行 rails 的时候在一个 rails 项目里面,且这个项目用的是 rails-3.2.5, 这个会找到一个 cli.rb 的文件,他来判断是否当前在 rails 目录或其子目录下面,如果是就找到第三个 scrict/rails,这之后会发生什么就取决于你 rails 后面的参数是什么了。其实一个 rails 命令要跑的东西真是超多啊,但是都在背后罢了,要想知道其中的奥秘,快去读读代码吧
#5 楼 @zgm 给力的解析,说的很清楚。