都是泪

起因是同事的 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