ari*_*kfr 21 ruby rubygems bundler
当一般使用带有项目的bundle和Rails时,你只能访问Gemfile中定义的gem.虽然这是有道理的,但它可能是有限的.当我想使用团队的其他成员不使用的某个RSpec格式化程序时,我发现它主要限制了它.除非它在Gemfile中,否则无法访问.
任何方式或我必须将其添加到Gemfile?
更新:我的问题不是Bundler而是Spork.在没有Spork的情况下运行RSpec时我没有使用任何格式化程序的问题.
更新#2:看起来使用Bundler仍然是导致问题的原因.使用Spork和不使用Spork之间的区别在于,在没有Spork的情况下运行RSpec时,它会在加载项目并进入Bundler"sandbox"之前加载格式化程序.
使用Bundler:
$ bundle exec irb
>> require 'fivemat'
LoadError: cannot load such file -- fivemat
from (irb):1:in `require'
from (irb):1
from /Users/arikfr/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'
Run Code Online (Sandbox Code Playgroud)
没有Bundler:
$ irb
>> require 'fivemat'
=> true
Run Code Online (Sandbox Code Playgroud)
Hol*_*ust 16
在ChiliProject中,我们允许用户创建一个Gemfile.local包含在主要Gemfile负载中的内容.这允许用户指定其他宝石,而无需更改我们Gemfile以简化更新.
为此,我们在Gemfile的底部包含了以下代码.
gemfile_local = File.expand_path('Gemfile.local', __dir__)
if File.readable?(gemfile_local)
puts "Loading #{gemfile_local}..." if $DEBUG
instance_eval(File.read(gemfile_local))
end
Run Code Online (Sandbox Code Playgroud)
它Gemfile.local本身被排除在存储库之外.gitignore.
Mat*_*att 11
我假设这些答案都没有被选为正确的,因为他们没有很好地解决问题:拥有额外的宝石,你可以使用默认情况下不需要对存储库中已有的文件进行任何更改来实现.也就是说,您不必修改任何文件,也不必记住不检查本地更改.这是我如何做到的.
这个想法基本上颠倒了Holger答案的依赖性,因此不需要修改共享的Gemfile.Bundler允许指定哪个文件用作gemfile,但奇怪的是,记录的方法显然不能与其配置文件一起使用,也不会修复.Bundler有一个模糊的功能,任何配置选项都可以在环境变量中设置或在命令行上传递.将所有命令作为bundle [command] --gemfile [yourgemfile]或BUNDLE_GEMFILE="[yourgemfile]" bundle [command]将导致Bundler读取您想要的任何gemfile.我强烈建议使用环境变量方法,并为当前会话创建别名或导出变量,特别是因为我无法使用带有"exec"命令的命令行开关.
因此,我像这样运行rspec:BUNDLE_GEMFILE="[mygemfile]" bundle exec rspec [filename]和bem我的bashrc中的别名的第一部分.奇迹般有效.
然后,你应该设置你的源代码控制来忽略你的Gemfile,无论是在项目的.gitignore中,还是为了让项目完全卫生而不改变它的.gitignore,你的个人全局忽略文件(默认情况下~/.config/git/ignore也是如此)格式化为项目的gitignore文件).
另外需要注意的是Bundler将根据Gemfile的名称创建一个锁文件.这非常方便,因为它可以防止你覆盖你的项目的Gemfile.lock,如果它已经签入,但你也需要忽略这个新的锁文件.如果您的gemfile是Foo.bar,请寻找Foo.bar.lock.
最后,您可以在自定义Gemfile中执行与Holger建议类似的操作:
source "http://rubygems.org"
gem "fivemat"
instance_eval(File.read(File.dirname(__FILE__) + "/Gemfile"))
Run Code Online (Sandbox Code Playgroud)
只要你记得指定你的Gemfile,你就会很高兴.