posts - 262,  comments - 221,  trackbacks - 0

今天使用Rails3.0.7 + rake 0.9.2部署Rails应用到heroku时,发现在heroku上面无法执行rake db:migrate命令。报错信息如下:

paul@RoR:~/Workspace/rails_projects/demo_app$ heroku rake db:migrate
(
in /app)
rake aborted
!
uninitialized constant Rake::DSL
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:8:in `<class:TaskLib>'

看来是rake的问题了,于是查了一下rake的版本

paul@RoR:~/Workspace/rails_projects/demo_app$ bundle 
Using rake (
0.9.2
Using 
abstract (1.0.0
Using activesupport (
3.0.7
Using builder (
2.1.2
Using i18n (
0.5.0
Using activemodel (
3.0.7)

网上google了一下,发觉又是一个Rails和其他gem不兼容的问题,只要把rake的版本设置为0.8.7就可以了。

Rails3.0的Gem配置在文件Gemfile中设置,但是默认的不会有rake的版本指定,我们需要手工指定。修改Gemfile,增加对rake的版本指定

gem 'rails''3.0.7'
gem 
'rake''0.8.7'

这样在没有rake0.8.7这个版本时,bundle会自动去RubyForge.org下载,如果本地已经安装了则使用本地的gem

满以为这样就可以了,可是一执行bundle install还是报错

paul@RoR:~/Workspace/rails_projects/demo_app$ bundle install
Fetching source index 
for http://rubygems.org/
You have requested:
  rake 
= 0.8.7

The bundle currently has rake locked at 
0.9.2.
Try running `bundle update rake`
paul@RoR:
~/Workspace/rails_projects/demo_app$ bundle unlock
Unlock 
is deprecated. To update to newer gem versions, use `bundle update`.
paul@RoR:
~/Workspace/rails_projects/demo_app$ bundle update rake

这是为什么呢?怎么会说bundle被锁定呢?原来啊Rails为了保证应用在不同的环境下配置一样,会对Gemfile生成一个lock文件,该lock文件把当前应用的gem配置都记录下来,并一同发布出去(这里指的是GitHub),一旦其他人下载该应用后执行bundle install时会强制按照该lock文件中指定的gem版本去下载或调用,而不是使用其他人本地已经安装的gem,这样就可以保证在不同的环境下应用的特性一致。

在完成对bundle的解锁后,依次执行下列命令
git commit -a
git push origin master
git push heroku master

完成之后,再次执行heroku rake db:migrate,问题解决
paul@RoR:~/Workspace/rails_projects/demo_app$ heroku rake db:migrate
(
in /app)
Migrating to CreateUsers (
20110628080358)
==  CreateUsers: migrating ====================================================
-- create_table(:users)
   
-> 0.0095s
==  CreateUsers: migrated (0.0096s) ===========================================

Migrating to CreateMicroposts (
20110629094445)
==  CreateMicroposts: migrating ===============================================
-- create_table(:microposts)
   
-> 0.0059s
==  CreateMicroposts: migrated (0.0060s) ======================================



-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
posted on 2011-07-03 21:28 Paul Lin 阅读(1273) 评论(1)  编辑  收藏


FeedBack:
# re: heroku rake db:migrate 错误解决一则[未登录]
2011-08-14 00:55 | rex
问题解决 谢谢  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2011年7月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(19)

随笔分类

随笔档案

BlogJava热点博客

好友博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜