2012-02-21 8 views
7

私は移行に非常に厄介な問題があります。rakeは初期化されていない定数 "コンピュータ"を打ち切った

まずにErrorMessage:

bundle exec rake db:migrate --trace 
(in /home/myhomefolder/msdnaa) 
** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:migrate 
rake aborted! 
An error has occurred, all later migrations canceled: 

uninitialized constant Computers 

は、今私は、私たちの管理者のいずれかによって作られたアップデートは、これは毎回起こる理由であるという仮定を持っています。すべての移行がない場合でも!

解決策のためにスタックオーバーフローで検索する以外に、私がやったことは、 "コンピュータ"のすべての単一ファイルをgrepすることです。 もちろん、この単語を含むいくつかのファイルがあります。私は構文エラーと、欠落した ":"のような通常のものをチェックしました。 それから、私は仕事の相手に助けを求めました(彼は私よりもはるかにルビーに熟達しています)。彼は手がかりがないので、すべてが正しいように見えます。

少し古いバージョンのRuby(1.8.7)とRails(3.0.9)を使用していますが、私のサーバー上で更新を行う権利がありませんので、対処しなければなりません。 はい、私は管理者に1.9.xと3.1.xのアップデートを依頼しましたが、先週は正常に機能していたため、それは間違いではありません。 それはそれがエラーであるべきですが、それはうまくいくはずですが、解決策は飲み水として簡単だと思いますが、私はそれを見ません!

提案がありますか?

編集:ここでは、--traceをイスト:

/var/lib/gems/1.8/gems/activesupport-3.0.9/lib/active_support/inflector/meth    ods.rb:113:in `constantize' 
/var/lib/gems/1.8/gems/activesupport-3.0.9/lib/active_support/inflector/meth    ods.rb:112:in `each' 
/var/lib/gems/1.8/gems/activesupport-3.0.9/lib/active_support/inflector/meth    ods.rb:112:in `constantize' 
/var/lib/gems/1.8/gems/activesupport-3.0.9/lib/active_support/core_ext/strin    g/inflections.rb:43:in `constantize' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:407    :in `load_migration' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:402    :in `migration' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:397    :in `migrate' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:539    :in `migrate' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:615    :in `call' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:615    :in `ddl_transaction' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:538    :in `migrate' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:525    :in `each' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:525    :in `migrate' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:435    :in `up' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:417    :in `migrate' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/railties/databas    es.rake:142 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:205:in `call' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:205:in `execute' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:200:in `each' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:200:in `execute' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:158:in `invoke_with_call_    chain' 
/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:151:in `invoke_with_call_    chain' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:144:in `invoke' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:112:in `invoke_tas    k' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:90:in `top_level' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:90:in `each' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:90:in `top_level' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_e    xception_handling' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:84:in `top_level' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:62:in `run' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_e    xception_handling' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:59:in `run' 
/var/lib/gems/1.8/gems/rake-0.9.2/bin/rake:32 
/var/lib/gems/1.8/bin/rake:19:in `load' 
/var/lib/gems/1.8/bin/rake:19 
Tasks: TOP => db:migrate 
+1

残りのエラーメッセージは何ですか?あなたは '--trace'オプションを使いますが、スタックトレースを削除しました – Gareth

+0

追加!投稿を参照してください... – ProblemChild

答えて

22

私の推測では、あなただけの移行が20120221123456_computers.rbのようなものをと呼ばれる追加したことで、その中に、あなたが何か等を有していて...

class SomeNameThatsNotComputers < ActiveRecord::Migration 
    ... 

Railsが移行を実行すると、クラスを定義するファイルを実行し、そのクラスをインスタンス化し、そのクラスインスタンスで#upまたは#downを呼び出します。 Railsはインスタンス化するクラスをどのように知っていますか?数字の接頭辞とアンダースコアの後に続くファイル名の部分に対応するはずなので、20120221123456_computers.rbのようなファイル名の場合、クラス名はコンピュータでなければなりません。

+0

それはそれだった...ちょっとソルマ! 私の欲求不満は、このプロジェクトがWindowsからLinuxに移植されたことで忘れてしまったことです。ですから、私はクラス名に注意を払わなかった(ヒントのおかげで)。 クラスは実際にCreateComputersという名前でした...何も意味がありませんが、コンピュータに名前を変更すると問題は解決しました。私が言ったように:飲み水として簡単! ありがとうございました! – ProblemChild

+0

ああそれは私の問題ではないはずです;) – ProblemChild

+0

ああ、それは私があなたの質問で言及したために私を投げました: "全く移行がない場合でも"。 – Gareth

0

あなたはgrepのは問題だ "コンピュータ" の存在を伝え言ったように。これは、コンピュータが定義されていなくても使用されていることを意味します。移行は、最初のアプリ環境をロードし、それがコンピュータbcoz失敗したその時が初期化されていない

関連する問題