Bookshelf.js / Knex.js上数据库模式加载的常见做法

ActiveRecord(来自Rails)和Sequelize(另一个node.js ORM)提供了一种初始化数据库的方法,从模型定义中创build表结构。 Rails通过rails db:schema:load命令来实现,而Sequelize具有相同的sync()方法。 通过使用它,我们不需要运行应用程序的整个迁移堆栈来启动一个新的数据库,也不需要在项目存储库上保存SQL转储。

来自这个背景,我期待Bookshelf.js或Knex.js有一些类似的function,但我找不到这两个项目的文档。

然后我决定看看使用Bookshelf的Ghost博客引擎的源代码,并且发现他们在自己的代码库中处理数据库初始化:

  • https://github.com/TryGhost/Ghost/blob/e40290a/core/server/data/schema/schema.js
  • https://github.com/TryGhost/Ghost/blob/e40290a/core/server/data/migration/populate.js
  • https://github.com/TryGhost/Ghost/blob/e40290a/core/server/data/schema/commands.js

我想避免写我自己的代码来处理像这样的事情,因为像Sequelize这样的其他选项提供了这个开箱即用。

是否有任何常见的做法,插件或库build议在书架上加载数据库模式?

我认为你是在正确的轨道上,也许只是错过了文档。

http://knexjs.org/#Migrations

对于加载模式,如果迁移被写为幂等性的,则可以运行迁移堆栈。

另一种select是使用数据库的导出和导入function。 例如: https : //www.postgresql.org/docs/9.1/static/app-pgdump.html

Rails通过创build两个rake任务db:schema:dump和db:schema:load来实现其迁移。 转储会以自定义的ruby格式将您的数据库模式转储到本地的schema.rb文件。 db:schema:加载该文件。

所以你可以使用pg_dump和pg_restore以及一个npm包脚本实现类似的function。 只要让脚本使用节点的exec方法调用pg_dump并每次都转储到同一个文件。