瞎扯淡 ignore Gemfile.lock 可以理解 为啥要 ignore Gemfile

helapu · 发布于 2017年07月07日 · 最后由 darkbaby123 回复于 2017年07月07日 · 421 次阅读
23224

都是泪

起因是同事的ubuntu系统开发机器无法启动 rails c。据说是因为gem spring导致的,是否有这个可能?我让它按照nodejs环境。 同事嫌麻烦,然后我建议可以将 gem spring注释便可 后来就是上面的提交记录了 你难道就不心痛吗

gem spring会导致rails c无法启动吧,安装nodejs也是可以的吧,你们遇到过吗?

共收到 10 条回复
1107

不加 Gemfile 的话,可以质疑你这个同事关于依赖管理的基本素养了,不夸张。

为了更好的协同开发,要求同事间的开发环境尽可能的一致这个也是强烈建议项(甚至强烈建议开发环境跟生产环境一致),某些 Gem 会在 Gemfile.lock 里标记一些平台要求的信息,这会在某些情况下,你的同事有混杂使用不同 OS,bundle 失败,所以包不包含 Gemfile.lock 倒是一个没有结论的问题,看需要。

另外,对于某个 Gem 的卡住安装这种,显然的,这位同事应该自己解决自己的环境问题(写 Rails 项目不想装 Rails 这个怎么讲都说不过去的),但是,实际上 bundler 还真可以做到不安装某些 Gem 的。

这个功能在我不知道该去哪读那该死的文档呢?

看一段 Capistrano 的输出:

00:15 bundler:install
      01 ~/.rvm/bin/rvm default do bundle install --path /home/jasl/sites/lab/shared/bundle --jobs 3 --without development test --deployment --quiet

注意 --without 后边的两个实参是 development test,对应 Rails 的 Gemfile 里的 development 和 test group,所以,你只需要吧 spring 单独放到一个 group 里

group :spring do
  gem 'spring'
end

然后

bundle install --without spring 即可了,这个手法 Redmine 就在用 https://github.com/redmine/redmine/blob/master/Gemfile#L42-L45 用来解决一些对环境有依赖的可选功能,另外他们那边也有讨论(我现搜的) http://www.redmine.org/boards/2/topics/29070

PS,spring 会 wrap 一些 gem 的 binstub(就是项目目录 bin 下的那些命令),不安装 spring 的话使用某些命令调用会失败。

15073

我们组里现在都是要求把Gemfile.lock提交进仓库的,原因是如果不提交,遇到过在两台服务器上部署,asset pipeline后的fingerprint值不一样。

3444

无论 Gemfile 还是 Gemfile.lock都应该加入版本管理啊... 即使不同平台, 也应该在Gemfile中声明和控制..lock 存在的意义就是保证你 gem 行为的统一..尤其是某些 gem 偷懒并没有明确指定依赖的版本的情况下.

至于某些 gem 报错, 对照错误信息解决...解决不了也应该有个具体原因...

8

ignore Gemfile.lock??那还用什么bundler呀...

Gemfile.lock和Gemfile 都要加到版本控制, 这不是常识嘛

http://bundler.io/v1.3/rationale.html#checking-your-code-into-version-control

23224
1107jasl 回复

Gemfile.lock 会包含一些平台相关的 这个忽略没有太大问题 但是仍然会保留一份 偶尔会遇到bug跟版本相关 比如我开发机上的某个gem版本为1.9,但是生产环境上每次都bundle的话 可能会到2.1 这样的版本升级很容易出问题 我会留意这个

1107
23224helapu 回复

一般包含进来,另外包不包含,也要合理的在Gemfile里约束好依赖的版本

23224
3444flypiggys 回复

这个怎么声明平台相关? 像这样吗

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
3444
23224helapu 回复

嗯,上面姜军发的redmine的gemfile里面就有很好的例子。一般共识好像是在应用开发中,应该包含lock,gem开发中不应该包含lock文件

Clarifying the Roles of the .gemspec and Gemfile

23224
1107jasl 回复

明白这个技巧了


platforms :mri, :mingw, :x64_mingw do
  # Optional gem for exporting the gantt to a PNG file, not supported with jruby
  group :rmagick do
    gem "rmagick", ">= 2.14.0"
  end

  # Optional Markdown support, not for JRuby
  group :markdown do
    gem "redcarpet", "~> 3.4.0"
  end
end

自己的项目

group :spring do
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

我这边改了 但是要在同事的电脑上才比较方便的测试 是否生效

bundle install --without spring
2575

别解决 ignore 的问题,解决同事……

20690 u1440247613 这下真伤心了 中提及了此贴 07月08日 02:21
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册