2016-04-27 81 views
0

因此,該應用程序在生產和本地運行情況良好。然後,在本地,我對數據庫進行了一些更改,例如添加列和更改列的屬性。當我去本地遷移時,出現了一個錯誤,所以我最終刪除了這個遷移文件,回滾了整個表格,並創建了一個全新的遷移,並創建了一切按我的需要設置的遷移。遷移到本地並且正在工作。Laravel遷移本地與生產

現在,我將這些更改推送到github,它們會自動提取到Laravel Forge並轉到生產服務器。我收到一個錯誤,說「表已經存在」。因此,github存儲庫爲我的生產服務器上已經運行的那個表提供了新的遷移。

我想弄清楚如何解決這個問題而不擾亂當前生產數據庫表中的記錄,並確保在需要刪除表的情況下存在遷移。

謝謝!

+0

這裏閱讀更多這是一個在那些你真正意識到分期/生產影子服務器的重要性的情況:) – blackpla9ue

+0

什麼是「生產陰影」? –

+0

在部署到活動服務器之前,它首先「部署」部署,以減輕直接將更改部署到活動服務器的一些問題。如此。特別是在有多個開發人員在單個項目上工作並且涉及遷移腳本的情況下,它確實派上用場。 – blackpla9ue

回答

3

如果您想在生產的數據庫中添加新列或更改任何內容。

您需要創建一個將這些行添加到數據庫的新遷移。這不像改變現有的遷移一樣簡單。

您在生產中獲得「表已存在」的原因是因爲遷移已經運行。

例如,如果您有一個用戶的表已經遷移,並且決定您想添加一個暱稱到現有的表。

您可以創建一個新的遷移php artisan make:migration alter_users_table_add_nickname

,然後該遷移內insted的使用Schema::create它會利用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'); 

    }); 
} 

您可以在Creating Columns

+0

對,我已經覆蓋了。但是,在這種特殊情況下,我應該問,如何協調我的存儲庫中的新遷移文件和服務器上的文件。也許這與將生產分支與我的本地分支進行同步一樣簡單,這樣這些文件就是如此。 –

+0

那麼,一個快速的解決辦法是導出您的生產數據庫的內容,而不是結構。刪除這些表並運行部署僞造以重新運行用編輯的遷移進行的遷移,然後再導入數據。但是,我會建議檢查您原來的遷移所在的提交併按照上述步驟操作。 – Anderscc

+1

好的,根據您的最後一句話,我需要將生產同步回本地,以便這些遷移再次相同。我會這樣做並跟進並標記你的答案。謝謝! –