新手问题 如何在 Rails 项目中方便的更新自己的 gem 包?

cqualpha · 发布于 2017年03月31日 · 最后由 ericguo 回复于 2017年03月31日 · 433 次阅读
96

现在做的一个项目比较麻烦,所以做了个gem 包封装了一些常用的lib
但是这个gem 包平时也做调整,因为还没稳定 所以 版本号也没变

主项目的Gemfile 我是这么引用的

gem 'cqualpha_client', :git => 'git@github.com:cqualpha/client.git', :branch => 'develop'

实际过程当中,当我更新 cqualpha_client 的 develop 分支后,在主项目中执行 bundle install,主项目的对应gem 包是没变化的 必须我手动去执行 bundle update cqualpha_client 或者直接运行 bundle update 才能更新

请问有何方式能够每次自动的更新gem包?或者每次bundle install 的时候能够去拉取最新版本的 gem ?

共收到 7 条回复
9442

git ref or tag, 但我觉得更麻烦了。

17

用 git hook 实现. 比如在主仓库建一个 pre-commit 的 hook, 脚本内容执行 bundle update .

或使用 guard ,来自动执行相关命令.

1573

呵呵,就这件事情可以提现一下像 npm 那种 local modules 的好处。它可以 link 本地的项目作为其他项目的 dependency,连 push 都不需要,本地改本地即时更新。

我们很多组件是写成了 ember addon,但是暂不推送和发布,而是直接 link 到 app 里,这边改 addon,app 那边还会自动刷新。的确很方便。

不知道全局管理的包管理器是否支持 symbolic link,可以试一试看。

2575

gem 以 git submodule 的方式放在你的项目下,然后用 path 引用:

gem "your_lib", path: "./vendor/your_lib"

版本的话,用 git 管理比强制每次 bundle install 自动更新要更靠谱点。

http://bundler.io/v1.5/gemfile.html

1573

@darkbaby123 脱离 git,只靠本地 link 探测改变有没有可能?

2575

@nightire 应该没问题的。这跟你说的 npm link 其他 module 是一个意思。不过不重启 server 就更新代码我记得只有 Rails engine 才行。

Eda824

把gem文件clone到本地,然后在用到的Gemfile中直接引用即可。

# $ bundle config --local local.wechat /Users/guochunzhong/git/oss/wechat
gem 'wechat', git: 'https://github.com/Eric-Guo/wechat', branch: :master

如果要autoloading这个gem,在development.rb中启用:

config.autoload_paths += Dir["#{config.root}/../oss/wechat/lib/**/"]

这个方法比直接引用path好的地方在于,不影响deploy。

8楼 已删除
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册