我可以在 strapi 运行时之外获取配置吗?
Can I get configs outside strapi runtime?
我正在 api 上实施 knex 迁移,我计划 运行 在 Heroku 发布阶段(在新版本开始之前)实施它们。
有什么方法可以从我的 knexfile.js
中获取 Strapi 的已解析配置?
像这样的东西会很棒:
const strapi = require('strapi');
strapi.config.database;
问题是我不想复制我的配置,要求 config/environments/xxx/database.json
不会给我 "parsed" 结果。意思是 "${process.env.DATABASE_HOST}"
还不会被插值。
最简单的解决方法是使用 process.env
而不是 strapi.config
。 Strapi 配置只不过是派生常量,因此编写您自己的脚本不会带来启动 strapi 的开销。我假设您正在使用 heroku 环境变量。如果变量在发布阶段不可用(例如 Google App Engine gcp-build),您需要使用 dotenv
或 yenv
或我构建的东西自己加载这些变量: kenv(基于对象的环境加载)。
我在使用 strapi 的 bootstrap 函数时遇到了类似的问题 - 我需要执行自己的迁移(在 strapi 土地之外),所以我最终编写了自己的 knex/bookshelf 种子以及在启动 strapi 之前手动执行的迁移脚本(不是通过预发布挂钩)。
另外,如果您想直接在 strapi 中构建迁移脚本,strapi hooks 也可能有用。
TLDR;
您可以通过以下方式获取 Strapi 的配置:
const strapi = require('strapi')({ serveAdminPanel: false });
strapi.load()
.then(() => {
const config = strapi.config.currentEnvironment;
});
但是你可以通过这种方式直接获取Strapi的knex实例:
const strapi = require('strapi')({ serveAdminPanel: false });
strapi.load()
.then(() => {
const knex = strapi.connections[
strapi.config.currentEnvironment.database.defaultConnection
];
// do anything with knex here
// like knex.migrate.latest();
});
--
我尝试先获取配置,但当我这样做时,我一直收到连接错误,所以我设法直接获取 knex 连接,一切开始工作!
我正在 api 上实施 knex 迁移,我计划 运行 在 Heroku 发布阶段(在新版本开始之前)实施它们。
有什么方法可以从我的 knexfile.js
中获取 Strapi 的已解析配置?
像这样的东西会很棒:
const strapi = require('strapi');
strapi.config.database;
问题是我不想复制我的配置,要求 config/environments/xxx/database.json
不会给我 "parsed" 结果。意思是 "${process.env.DATABASE_HOST}"
还不会被插值。
最简单的解决方法是使用 process.env
而不是 strapi.config
。 Strapi 配置只不过是派生常量,因此编写您自己的脚本不会带来启动 strapi 的开销。我假设您正在使用 heroku 环境变量。如果变量在发布阶段不可用(例如 Google App Engine gcp-build),您需要使用 dotenv
或 yenv
或我构建的东西自己加载这些变量: kenv(基于对象的环境加载)。
我在使用 strapi 的 bootstrap 函数时遇到了类似的问题 - 我需要执行自己的迁移(在 strapi 土地之外),所以我最终编写了自己的 knex/bookshelf 种子以及在启动 strapi 之前手动执行的迁移脚本(不是通过预发布挂钩)。
另外,如果您想直接在 strapi 中构建迁移脚本,strapi hooks 也可能有用。
TLDR;
您可以通过以下方式获取 Strapi 的配置:
const strapi = require('strapi')({ serveAdminPanel: false });
strapi.load()
.then(() => {
const config = strapi.config.currentEnvironment;
});
但是你可以通过这种方式直接获取Strapi的knex实例:
const strapi = require('strapi')({ serveAdminPanel: false });
strapi.load()
.then(() => {
const knex = strapi.connections[
strapi.config.currentEnvironment.database.defaultConnection
];
// do anything with knex here
// like knex.migrate.latest();
});
--
我尝试先获取配置,但当我这样做时,我一直收到连接错误,所以我设法直接获取 knex 连接,一切开始工作!