我在 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!?)?不知道大家遇到類似的問題都是用什麼方式解決呢?
如果你想要给本地升级 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
原來我的問題是佈署上出的問題,我的 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
---
install: --no-rdoc --no-ri
update: --no-rdoc --no-ri
但跑 deploy 时用到的用户会不会去读这个不好说。(很抱歉,设 --no-rdoc 对解决这个帖子里描述的问题没什么帮助,只是看到 rdoc 而提一下)
hooopo, ashchan +1 还有这篇 http://yehudakatz.com/2011/05/30/gem-versioning-and-bundler-doing-it-right/
@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 一次就好了,我不知道具体是什么原因。