使用和不使用 bundle exec 运行 rake 命令的主要区别是什么?
我看到很少有帖子说当您使用 bundle exec 运行命令时,它将在 gem 文件中定义的 gems 版本范围内运行。如果是这样,那么应该强制使用 bundle exec
运行 rake 命令?
最佳答案
bundle exec rake some:task
在您的包的上下文中运行 rake 任务。
你没有明确提到 Rails,但我看到你的帖子被标记为 Rails,所以一个设计的例子可能如下所示:
出于某种正当理由,您在系统上安装了虚构的 whateva-whateva
gem 的 2.0 版。
您决定要从某个地方下载一个旧的 Rails 项目以检查它并在克隆项目的根文件夹中运行 bundle install
。该命令将安装 Rails 应用程序所需的所有 gem,其中之一恰好是虚构的 whateva-whateva
gem 的版本 1.0。
所以当前状态是这样的:您的旧 Rails 应用程序有一个 gem 包,其中包含旧版本的 whateva-whateva
,而您的系统范围的 gem 包含较新版本的 whateva- whateva
gem 。
当您运行与您的 Rails 应用程序关联的 rake 任务时,您希望加载哪个版本?当然是旧的。
为了做到这一点,您可以使用 bundle exec rake the:task
并在您的包的上下文中运行 rake 命令——旧版本的 gem 加上指定的任何其他内容在旧 Rails 应用程序的 Gemfile 中。
所以是的,毕竟,我认为可以肯定地说,最好的做法是您应该始终在 bundle exec
前面添加,但老实说,我很懒惰,很少这样做,除非我看到问题。
在其他新闻中,如果您使用 Bundler 的 binstubs,则无需添加它。这是设置它的链接:https://thoughtbot.com/blog/use-bundlers-binstubs
关于ruby-on-rails - 使用和不使用 bundle exec 运行 rake 命令的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16477253/