论坛首页 编程语言技术论坛

heroku rake db:migrate 错误解决一则

浏览 2840 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-07-03  
今天使用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) ======================================
   发表时间:2011-08-08  
Good it works
0 请登录后投票
   发表时间:2011-08-17  
今天正好碰到这个问题
ps:新手发帖好难~
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics