如何在Gemfile中指定本地gem?

我想要Bundler加载本地gem。 那有选择吗? 或者我是否必须将gem文件夹移动到.bundle目录中? linux


#1楼

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

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

若是您正在并行开发两个宝石或一个gem和一个rails应用程序,这将很是有用。 github

但请注意,这仅在您已经使用git做为依赖项时才有效,例如: ruby

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

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

正如文档中所见。 服务器


#2楼

若是您正在使用git,也能够使用git引用本地gem。 ide

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

而后,若是它改变了我跑 spa

bundle exec gem uninstall foo
bundle update foo

但我不肯定每一个人都须要运行这两个步骤。 code


#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是您的gem的名称,而/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是您的gem的名称,而/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做为外部库显示。 有关该错误的更多信息能够在这里这里找到
  • 当我在本地gem中更改某些内容时,为了在rails应用程序中加载,我应该stop/start rails服务器
  • 若是我要更改gem的versionstopping/starting Rails服务器会给我一个错误。 为了解决这个问题,我在rails应用程序Gemfile指定了gem版本,以下所示:

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

#4楼

若是你也想要分支:

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

#5楼

我相信你能够这样作:

gem "foo", path: "/path/to/foo"
相关文章
相关标签/搜索