Rails和bin/rails有什么区别?

25

作为一名新生,我遇到了许多不清楚的细节。其中一个就是bin这个东西。我一直在想以下两者之间有什么区别:

rails generate... 

bin/rails generate...

? 在控制台运行这些命令时,它们似乎表现相同。还有rakebin/rake等等...可能还有更多。谢谢帮助。

--问候


除了在某些情况下“rails”或“rake”可能不存在路径中而你可以从“bin”目录运行它们,否则没有区别。你可以在这里阅读有关路径的信息:https://dev59.com/LmQn5IYBdhLWcg3wzZxU#16560612。 - Mike Szyndel
2个回答

30
如果你只运行 'rails' 命令,RubyGems 会在 PATH 中寻找最新的 rails 可执行文件并激活它。如果您在项目中使用该版本的 Rails,则此操作是可行的。但如果您的项目使用旧版本 Rails 并运行 'rails',那么当尝试运行在最新版本 Rails 中更改的代码时,可能会遇到问题。Binstubs 通过确保您的环境使用项目 Gemfile 中指定的版本来解决此问题。

6
考虑这种情况:我有一个使用Rails 4.0.0版本的应用程序。我的目标是将其升级到Rails 4.1.9。为此,我尝试逐步升级:首先升级到4.0.13,然后到4.1,最后到4.1.9。
一切都很顺利。使用RSpec时,所有测试都通过了。
最后,我尝试使用`rails s`命令运行服务器。糟糕!Ruby崩溃了。然后我使用`bin/rails s`命令。一切正常。
因此,如果您在系统中安装了不同版本的Rails,请使用`bin/rails`选项更安全。
附言:为了确保我的假设是正确的,我删除了除4.1.9之外的所有Rails版本,然后使用`rails s`命令重新运行服务器。这次没有崩溃。
希望这可以澄清问题。

对我来说这不是百分之百清楚的。多年以前我使用 Rails 时它仍然可以工作得很好。几个月前,我发现我必须在某些项目中使用 bin/rails。在当前的一个项目中,例如当我运行 rails g 时无法使用我的自定义生成器,但只能在使用 bin/rails g 时才可见。为什么会这样?你有任何想法吗? - basiszwo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接