提问



我喜欢Bundler加载本地gem。是否有选项?或者我必须将gem文件夹移动到.bundle目录中吗?

最佳参考


我相信你可以这样做:


gem "foo", :path => "/path/to/foo"

其它参考1


除了指定路径(如Jimmy所提到的),您还可以通过使用以下配置选项强制Bundler仅为您的环境使用本地gem :


$ bundle config local.GEM_NAME /path/to/local/git/repository


如果您并行开发两个宝石或一个宝石和一个rails应用程序,这将非常有用。


但请注意,这只适用于您已经使用git作为依赖项的情况,例如:


# In Gemfile
gem 'rack', :github => 'rack/rack', :branch => 'master'

# In your terminal
$ bundle config local.rack ~/Work/git/rack


如文档所示。[33]

其它参考2


如果您正在使用git,也可以使用git引用本地gem。


gem 'foo',
  :git => '/Path/to/local/git/repo',
  :branch => 'my-feature-branch'


然后,如果它改变了我跑


bundle exec gem uninstall foo
bundle update foo


但我不确定每个人都需要运行这两个步骤。

其它参考3


要在Rails项目中使用本地gem存储库,请按照以下步骤操作:



  1. 检查您的gem文件夹是否是git存储库(该命令在gem文件夹中执行)


    git rev-parse --is-inside-work-tree
    

  2. 获取存储库路径(该命令在gem文件夹中执行)


    git rev-parse --show-toplevel
    

  3. 为rails应用程序设置本地覆盖


    bundle config local.GEM_NAME /path/to/local/git/repository
    


    其中GEM_NAME是宝石的名称,/path/to/local/git/repository是命令的输出2

  4. 在您的申请Gemfile中添加以下行:


    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    

  5. 运行bundle install应该是这样的:


    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 
    


    其中GEM_NAME是宝石的名称,/path/to/local/git/repository来自2

  6. 最后,运行bundle list,而不是gem list,你应该看到这样的东西:


    GEM_NAME (0.0.1 5a68b88)
    


    其中GEM_NAME是宝石的名称






我观察到的几个重要案例:


Rails 4.0.2  
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
Ubuntu 13.10  
RubyMine 6.0.3



  • 似乎RubyMine没有将本地宝石显示为外部库。有关该错误的更多信息可以在这里和这里找到

  • 当我在本地gem中更改某些内容时,为了在rails应用程序中加载我应该stop/start rails服务器

  • 如果我要更改gem的versionstopping/starting Rails服务器会给我一个错误。为了解决这个问题,我在rails应用程序Gemfile中指定了gem版本,如下所示:[34] [35]


    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    


其它参考4


您可以使用source:source: 'https://source.com', git repository (:github => 'git/url')和本地路径:path => '.../path/gem_name'引用gems。

您可以在本文中了解有关Gemfiles以及如何使用它们的更多信息。[36]

其它参考5


如果你也想要分支:


gem 'foo', path: "point/to/your/path", branch: "branch-name"