在 Rails Ruby 中使用 bundle exec

use of bundle exec in Ruby on Rails

bundle exec rake db:migrate 的真正含义是什么?或 bundle exec rails s 我知道 bundle 处理我们在 Gemfile 中指定的所有 gem,并且 rake 处理所有你可以通过脚本做的事情但是这些命令不会在没有前缀 bundle exec 的情况下执行,我在互联网上找不到任何关于这个的文档!!

Bundler - 管理应用程序依赖项的最佳方式

运行 包上下文中的命令

$ 捆绑执行

Exec 运行一个命令,使其能够访问包中的 gem。在使用 bundle exec 时,您可以要求并调用捆​​绑的 gem,就好像它们已安装到系统范围的 RubyGems 存储库中一样

与:

捆绑执行耙 db:migrate

以非正式的方式,这意味着您的 rails 环境将

-使用捆绑器安装依赖项 然后 -运行 您的 rails 应用中的数据库迁移 (/yourapp/db/migrate)

除了数据库操作,您还可以执行任何其他可以由 rake 控制的命令行操作(例如构建您的应用程序、扩展、清理一些文件等)

如果您想避免混淆的情况(您的设置中的某些 gem 可能已过时或从您的环境中丢失),这可能会很有用。这是一个很好的做法,因为单独调用 rake 并不能保证你检查了所有的依赖项。

Bundler 用于创建一个与底层主机系统分离的稍微孤立的 Ruby 语言编程环境。它能做的事情是有限的。例如,您需要 RVM 之类的东西来管理不同版本的 Ruby 语言虚拟机。当然,为了 运行.

,Ruby 和 Bundler 本身都必须在您的项目之外可用。

但是,在单个项目中 bundle exec 将限制对 Bundler 安装到该项目中的 gem 的访问。这意味着 Rake 实用程序在通过 bundle exec 调用时将是安装在项目中的 rake 版本,而不是系统范围的版本。这也意味着 `bundle rake db:migrate' 将使用为您的项目安装的 rails 的正确版本。这将您的项目与对主机上 Ruby 环境所做的更新隔离开来,从而防止出现兼容性问题。

您可以通过在 .bash_profile 中为 bundle exec、[=12= 创建别名(假设您使用 OSX 或 Linux/unix)来避免冗长] 和 bundle exec rails。我使用 bexec、brake 和 brails.