2016-04-27 10 views
0

したがって、アプリケーションは本番環境とローカルで正常に動作していました。次に、ローカルで、列の追加や列の属性の変更など、DBにいくつかの変更を加えました。ローカルに移行するときにエラーが発生したため、移行ファイルを削除し、テーブル全体をロールバックして、必要に応じてすべての設定を行って新しい移行を作成しました。ローカルに移行して動作しています。Laravel Migration Local vs Production

今、私はgithubのにこれらの変更をプッシュし、それらが自動的にLaravelフォージにし、本番サーバに引き離さています。 「テーブルは既に存在しています」というエラーが表示されます。そのため、githubリポジトリには、すでにプロダクションサーバで実行されているそのテーブル用の新しい移行があります。

私は、生産DBのテーブルに、現在のレコードが動揺し、私はテーブルを削除する必要がある場合、代わりに移行がありますことを確認せずにこの問題を解決する方法を把握しようとしています。

ありがとうございます!あなたは新しい列を追加したり、本番でデータベースに何かを変更したい場合は

+0

にここを読むことができSchema::table

public function up() { Schema::table('users', function(Blueprint $table) { $table->string('nickname'); }); } public function down() { Schema::table('users', function(Blueprint $table){ $table->dropColumn('nickname'); }); } 

を利用するだろうSchema::createを使用してのinsted新しい移行を作成しますステージング/プロダクションシャドーサーバーの重要性を本当に理解しているインスタンスの例を示します。 – blackpla9ue

+0

「プロダクションシャドー」とは何ですか? –

+0

ライブサーバーに変更を直接展開する際の問題のいくつかを軽減するために、ライブサーバーに展開する前にまず展開をステージングする場所です。このような。特に、単一のプロジェクトで複数の開発者が作業している場合や、移行スクリプトが含まれている場合は、本当に便利です。 – blackpla9ue

答えて

3

あなたは、データベースにそれらの行を追加し、新たな移行を作成する必要があります。既存の移行を変更するだけでは簡単ではありません。移行がすでに実行しているため、

本番の「テーブルが既に存在する」取得している理由があります。

たとえば、ユーザーのテーブルが既に移行していたとは、既存のテーブルにニックネームを追加したいことを決めた場合。

あなたはphp artisan make:migration alter_users_table_add_nickname

が、その後、この移行の内側に、それはこれが1であるあなたがCreating Columns

+0

そうです、私はそれをカバーしています。しかし、この特定のケースでは、リポジトリ内の新しい移行ファイルとサーバー上のファイルを調整する方法を尋ねてきました。プロダクションブランチとローカルブランチを同期させるのと同じくらい簡単なので、それらのファイルは同じ方法です。 –

+0

まあ、簡単な修正は、構造ではなく、本番DBの内容をエクスポートすることです。テーブルを削除し、forgeでdeployを実行して、編集済みの移行で移行を再実行してからデータをインポートしなおしてください。元の移行があった場所を確認し、上記の手順に従ってください。 – Anderscc

+1

あなたの最後の文章ごとに、プロダクションをローカルに同期する必要があります。そのため、それらの移行は再び同じです。私はそれを行い、あなたの答えを記入してフォローアップします。ありがとう! –

関連する問題