在我看来,调用bundle exec rake或bundle exec make很奇怪:为什么不呢
bundle exec bundle exec rake然后?
我认为我应该能够从Rakefile (或Makefile)中要求和使用Bundler。但是,我找不到如何使用正确的gem组运行测试,以下代码不起作用:
# 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。
发布于 2014-05-06 14:25:23
bundle exec的全部目的是在项目的Gemfile上下文中运行下面的内容。
如果没有它,对rake的调用可能会使用系统范围内安装的rake和/或gem。这不允许对每个项目中使用的每个gem的哪个版本进行细粒度控制。当您开发(或在生产环境中使用)多个使用相同gem的不同版本的ruby项目时,这就变得特别重要。
Bundler允许您的项目是自包含的,而不需要对系统可用依赖项进行任何假设。
也就是说,您可以使用bundle exec创建一个前缀为您想要的内容的外壳别名。例如,我的zsh配置(启用了bundler插件)为我提供了bundle exec的be简写。
发布于 2014-05-07 22:07:54
关于Bundler.setup(:default, :test)没有任何影响,在我看来,这可能是由捆绑程序错误引起的,例如this one。
我认为这是一个错误,因为Bundler.setup并没有被真正忽略。
考虑以下设置:
# Gemfile
source 'https://rubygems.org'
ruby '2.1.1'
gem 'rack-test', :group => :test# Rakefile
require 'rake/testtask'
Rake::TestTask.new do |t|
require 'bundler'
Bundler.setup(:default)
t.test_files = FileList['test.rb']
end# test.rb
require 'bundler'
Bundler.setup(:default)
require 'rack/test'出乎意料的是,rake test运行时没有错误。
如果我在Rakefile中注释掉Bundler.setup(:default),那么它就不再需要机架/测试了。
https://stackoverflow.com/questions/23486763
复制相似问题