heroku rake db:migrate 错误解决一则

heroku rake db:migrate 错误解决一则

今天使用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)  ======================================



-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。

你可能感兴趣的:(heroku rake db:migrate 错误解决一则)