ruby-on-rails - 使用和不使用 bundle exec 运行 rake 命令的区别

标签 ruby-on-rails ruby rake bundle

使用和不使用 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/

相关文章:

ruby-on-rails - 我的rake任务未显示在rake -T中

ruby-on-rails - RSpec 文档...它藏在哪里?

ruby-on-rails - 如何使用 ruby​​ 修改 pdf 中的单个页面大小?

ruby-on-rails - Amazon SQS 是这里的正确选择吗? Rails 性能问题

ruby-on-rails - 在 Rails 中访问模型属性

ruby-on-rails - Has_many : through in Rails. 我可以有两个外键吗?

ruby - rake 数据库 :migrate hangs on db:schema:dump step

ruby-on-rails - Rails (5.2.2) AJAX 调用部分不工作

android - 无方法错误 : undefined method `switch_to'

ruby-on-rails - 在 RSpec 中多次运行 Rake 任务返回 nil?