2013-02-23 5 views
9

は、私は、コマンドを使用Railsを初期化せずにschema.rbからデータベースを作成するには?私の初期化子の一つで、それが参照しているため、これは失敗し、しかし</p> <p>「ロードすくいデシベル:::スキーマ」

schema.rbからすべての私のテーブルを作成しようとしています(データベースが空であるため)明らかに存在しないモデル/テーブル

これらの行をコメントアウトしてから、schema:loadを再度実行することはできますが、別の方法がありますか?

答えて

5

テーブルの存在のチェックをイニシャライザに追加できます。

if TheModel.table_exists? 
    // do something with the model 
end 
+0

ActiveAdmin gemのイニシャライザでこの方法を使用すると、gemが完全に不適切に読み込まれてしまいました。とにかく、+1。 – MrDerp

28

恐らく最も速い方法は、問題のあるイニシャライザをアプリケーションの外にある一時ディレクトリに移動し、スキーマロードを実行することです。

  1. は、新しいレールのアプリを作成します:それが動作しない、または何らかの理由でオプションではありませんない場合しかし、あなたは常に裸の骨のレールのアプリを作成することによって、スキーマのロードを行うためにすることを回避することができrails new (app)-fixer
  2. 特定の例外がない限り、gemfileをフィーラーアプリにコピーします。
  3. database.yml設定をフィクサーアプリにコピーします。
  4. schema.rbファイルをフィクサーアプリにコピーします。
  5. アプリに必要なすべての適切な「バンドルインストール」コマンドを実行します。
  6. その後、あなたの現在のスキーマに基づいて、ゼロから新しいデータベースを構築します"rake db:drop db:create db:schema:load"

を実行します。

+0

受け入れられる回答である必要があります。魅力のように働いた – Aakanksha

関連する問題