Node.jsアプリケーションでknexを機能させようとしています。私はチュートリアルに従っていて、ある時点でテーブルを作成しましたが、プロセスを繰り返すことができませんでした。テーブルを削除し、すべての移行フォルダーを削除しました。この時点で最初からやり直しましたが、新しい移行を作成してknex migrate:latest
を実行した後、元の移行が欠落しているため、移行ディレクトリが破損しているというエラーが表示されます。
私は、ファイルが欠落している場合、それがそこにあったことを知らないはずだという印象を受けました。
プロジェクトから移行を削除する適切な方法は何ですか?
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
しかし、私が削除したため、この移行は存在しません。
移行をロールバックする必要がありました(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
テーブルとデータを再作成できるシードと移行ファイルを使用して開発中であるため、利用可能なknex移行を使用してデータベースをドロップして再作成できます。
私の開発環境はsqliteを使用していたので、ターミナルのrm -rf dev.sqlite3
でこれを修正しました。
Postgresqlを使用すると、ターミナルではdropdb "db_name"
になります。または、その他の選択肢については これを参照 になります。
これは簡単で、その後rollbackを実行する必要はありません。
古い移行に関する記録はなくなり、新しいknex migrate:latest
で再作成できます。
Herokuでpostgresqlを使用している場合は、データベースの資格情報に移動し、[データベースのリセット]ボタンをクリックすると機能します
このコマンドを実行すると、データベースをリセットできます。
Heroku run pg:reset --confirm app-name