首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >` `bundle exec rake`还是`rake`?那么` `Rake::TestTask`呢?

` `bundle exec rake`还是`rake`?那么` `Rake::TestTask`呢?
EN

Stack Overflow用户
提问于 2014-05-06 13:43:51
回答 2查看 2K关注 0票数 2

在我看来,调用bundle exec rakebundle exec make很奇怪:为什么不呢

代码语言:javascript
复制
bundle exec bundle exec rake

然后?

我认为我应该能够从Rakefile (或Makefile)中要求和使用Bundler。但是,我找不到如何使用正确的gem组运行测试,以下代码不起作用:

代码语言:javascript
复制
# Rakefile
require 'rake/testtask'

Rake::TestTask.new do |t|
  require 'bundler'
  Bundler.setup(:default, :test)  # this has no effect
  t.test_files = FileList['test.rb']
end

有人可以帮助我正确设置Rake测试任务吗?或者解释一下使用bundle exec rake的哲学原因

请注意,bundle exec rake需要将gem rake添加到Gemfile。

EN

回答 2

Stack Overflow用户

发布于 2014-05-06 14:25:23

bundle exec的全部目的是在项目的Gemfile上下文中运行下面的内容。

如果没有它,对rake的调用可能会使用系统范围内安装的rake和/或gem。这不允许对每个项目中使用的每个gem的哪个版本进行细粒度控制。当您开发(或在生产环境中使用)多个使用相同gem的不同版本的ruby项目时,这就变得特别重要。

Bundler允许您的项目是自包含的,而不需要对系统可用依赖项进行任何假设。

也就是说,您可以使用bundle exec创建一个前缀为您想要的内容的外壳别名。例如,我的zsh配置(启用了bundler插件)为我提供了bundle execbe简写。

票数 3
EN

Stack Overflow用户

发布于 2014-05-07 22:07:54

关于Bundler.setup(:default, :test)没有任何影响,在我看来,这可能是由捆绑程序错误引起的,例如this one

我认为这是一个错误,因为Bundler.setup并没有被真正忽略。

考虑以下设置:

代码语言:javascript
复制
# Gemfile
source 'https://rubygems.org'
ruby '2.1.1'
gem 'rack-test', :group => :test
代码语言:javascript
复制
# Rakefile
require 'rake/testtask'
Rake::TestTask.new do |t|
  require 'bundler'
  Bundler.setup(:default)
  t.test_files = FileList['test.rb']
end
代码语言:javascript
复制
# test.rb
require 'bundler'
Bundler.setup(:default)
require 'rack/test'

出乎意料的是,rake test运行时没有错误。

如果我在Rakefile中注释掉Bundler.setup(:default),那么它就不再需要机架/测试了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23486763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档