2016-11-11 182 views
3

我試圖在我的node.js應用程序中使用knex。我正在跟着一個教程,並在某個時候創建​​了一個表,但無法重複這個過程。我刪除了表並刪除了所有的遷移文件夾。在這一點上,我重新開始,但創建新的遷移後,然後運行knex migrate:latest我得到一個錯誤,說遷移目錄已損壞,因爲我有原始遷移丟失。在我的Node.js應用程序中使用Knex.js刪除遷移

我的印象是,如果文件丟失,它應該不知道它曾經存在。

什麼是從我的項目中刪除遷移的正確方法?

knexfile.js

development: { 
    client: 'pg', 
    connection: { 
    host: '127.0.0.1', 
    user:  'postgres', 
    password: 'password', 
    database: 'myDatabase' 
    }, 
    pool: { 
     min: 10, 
     max: 20 
    }, 
    migrations: { 
     directory: __dirname + '/db/migrations' 
    }, 
    seeds: { 
     directory: __dirname + '/db/seeds/development' 
    } 

db.js

var config  = require('../knexfile.js'); 
var env   = 'development'; 
var knex  = require('knex')(config[env]); 

module.exports = knex; 
console.log('Getting knex'); 
knex.migrate.latest([config]); 
console.log('Applying migration...'); 

運行這給了錯誤,

knex migrate:latest 

Using environment: development 
Error: The migration directory is corrupt, the following files are missing: 20161110130954_auth_level.js 

但這種遷移並不存在,因爲我刪除它。

回答

0

您有刪除文件前回滾遷移(knex migrate:rollback),我想你可以做的是:

touch [full_path_to_migrations_here]/migrations/20161110130954_auth_level.js

knex migrate:rollback

rm [full_path_to_migrations_here]/migrations/20161110130954_auth_level.js

參考這裏 https://github.com/tgriesser/knex/issues/1569

+1

爲了刪除遷移,我最終進入數據庫並刪除與遷移相關的行,然後刪除與之關聯的js文件。 – wuno

0

由於您正在開發與您的種子和遷移文件,您可以重新創建表和數據,您可以刪除並使用可用的knex遷移重新創建數據庫。

我的開發環境是使用sqlite,所以終端上的rm -rf dev.sqlite3修復了這個問題。

對於postgresql,將在終端上爲dropdb "db_name"或者在see this上有更多選擇。

這很簡單,之後不需要做回滾

關於您的舊遷移的記錄已消失,您可以使用新的knex migrate:latest重新創建該記錄。

相關問題