都是泪
起因是同事的 ubuntu 系统开发机器无法启动 rails c。据说是因为 gem spring 导致的,是否有这个可能?我让它按照 nodejs 环境。 同事嫌麻烦,然后我建议可以将 gem spring 注释便可 后来就是上面的提交记录了 你难道就不心痛吗
gem spring 会导致 rails c 无法启动吧,安装 nodejs 也是可以的吧,你们遇到过吗?
不加 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 的话使用某些命令调用会失败。
我们组里现在都是要求把 Gemfile.lock 提交进仓库的,原因是如果不提交,遇到过在两台服务器上部署,asset pipeline 后的 fingerprint 值不一样。
无论 Gemfile
还是 Gemfile.lock
都应该加入版本管理啊...
即使不同平台,也应该在Gemfile
中声明和控制..lock 存在的意义就是保证你 gem 行为的统一..尤其是某些 gem 偷懒并没有明确指定依赖的版本的情况下。
至于某些 gem 报错,对照错误信息解决...解决不了也应该有个具体原因...
ignore Gemfile.lock??那还用什么 bundler 呀...
Gemfile.lock 和 Gemfile 都要加到版本控制,这不是常识嘛
http://bundler.io/v1.3/rationale.html#checking-your-code-into-version-control
Gemfile.lock 会包含一些平台相关的 这个忽略没有太大问题 但是仍然会保留一份 偶尔会遇到 bug 跟版本相关 比如我开发机上的某个 gem 版本为 1.9,但是生产环境上每次都 bundle 的话 可能会到 2.1 这样的版本升级很容易出问题 我会留意这个
这个怎么声明平台相关? 像这样吗
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
嗯,上面姜军发的 redmine 的 gemfile 里面就有很好的例子。一般共识好像是在应用开发中,应该包含 lock,gem 开发中不应该包含 lock 文件
明白这个技巧了
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