新手问题 Gemfile.lock 該加入 .gitignore 嗎?

xdxie · 2013年02月28日 · 最后由 fsword 回复于 2013年03月02日 · 4594 次阅读

我在local端開發時該把Gemfile.lock加入到.gitignore否?

現在的狀況是server的rdoc已經update到4.0;local端的rdoc在3.12 local的Gemfile裡面沒有指明rdoc版本,產生的Gemfile.lock正是local的3.12 當我deploy到server時,會先bundle install再rake precompile就會遇到 rake aborted! Could not find rdoc-3.12.2 in any of the sources 的問題,這rdoc根本不會是我rails app會用到的套件,難道我的sever要為這個不會用到的套件進行更新?還是在local的Gemfile就指明rdoc版本(這樣就會安裝兩個版本的rdoc!?)?不知道大家遇到類似的問題都是用什麼方式解決呢?

共收到 21 条回复

简单的说:Never

Gemfile.lock的意义就是确保大家用的gem版本都是一致的,当然要放入版本控制

請問我遇到的問題該如何解決呢?

应该加入,不然deploy的时候要安装一堆gem啊

如果你想要给本地升级rdoc,命令是 bundle update rdoc@local 如果你想要纠正server的rdoc,命令是 bundle install@server

如果你还有类似的问题,建议到这里 http://gembundler.com 阅读文档并理解 bundler, Gemfile,Gemfile.lock 的机制。

这里有个收费的 Screencast,可以帮助你理解 bundler 的工作机制: http://railscasts.com/episodes/201-bundler-revised

#5楼 @lgn21st 我真希望那个叫 @local@server 的用户跳出来问:”@ 我们干啥“

#7楼 @hbin 被你这么一说... 还真有可能啊。

插一句题外话,我一直觉得 gem install 默认应该加上 --no-ri --no-rdoc

原來我的問題是佈署上出的問題,我的deploy.rb並沒有加入require "bundler/capistrano" 而是自己寫的 before "deploy:assets:precompile","deploy:bundle_install" task :bundle_install do run "cd #{current_path} && bundle install" end 雖然問題解決,不過還滿想知道我的task問題出在哪。 放了bundler/capistrano後多出 幫我做了bundle install --gemfile

#9楼 @ashchan 我手動新增~/.gemrc檔案並加入gem:...--no-rdoc沒有作用

#11楼 @xdxie 格式是这样的:

---
install: --no-rdoc --no-ri
update:  --no-rdoc --no-ri

但跑 deploy 时用到的用户会不会去读这个不好说。(很抱歉,设 --no-rdoc 对解决这个帖子里描述的问题没什么帮助,只是看到 rdoc 而提一下)

#13楼 @hooopo 原来如此,受教了,Yahuda 的 Blog URL 是那一篇阿?很有兴趣想要读一下。

按说要提交,版本一致,没那么多事。不过话说我昨天把这货从版本库里删了,因为是自己的站,加上我是个升级狂……

@lgn21st 有一种情况要加入,开发使用win部署在linux或者反过来,有些gem 比如mysql2会在gemfile.lock里标示平台信息mysql2-x86 然后另一个环境里bundle的时候就挂掉了。。。

我用了某个rails社区的源码在本地环境。结果我其他的app直接无法启动了。来下面的错误。

You have already activated eventmachine 1.0.1, but your Gemfile requires eventmachine 1.0.0. Using bundle exec may solve this. (Gem::LoadError)

我把gemfile.lock删除,重新bundle一次就好了,我不知道具体是什么原因。

#20楼 @metal 这不是Gemfile.lock 的错误,恰恰是它的必要性所在,提示已经很清晰了,你应该用bundle exec 做之前的事情

Gemfile.lock是很好的设计,它把应用的外部依赖全部锁定,确保了开发环境的一致性,这对质量保证非常重要,相比之下,maven之类的工具简直弱爆了

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