我可以在trapi运行时之外获取配置吗?

时间:2020-04-29 20:24:13

标签: knex.js strapi

我正在我的api上实现knex迁移,并计划在Heroku发布阶段(在新版本开始之前)运行它们。

有什么方法可以从我的def gradientDescent(x, y, theta, alpha, num_iter): m = np.size(x,axis=0) for i in range(num_iter): theta = theta - (alpha / m) * np.dot(x.T,(np.dot(x, theta) - y)) return theta theta = gradientDescent(X, y, [0,0], 0.01, 1500) theta # array([-3.81920963, 1.22926242]) 获取Strapi的已解析配置吗?

这样的事情会很棒:

knexfile.js

问题是我不想复制我的配置,并且要求const strapi = require('strapi'); strapi.config.database; 不会给我“已解析”的结果。意味着config/environments/xxx/database.json不会被插值。

2 个答案:

答案 0 :(得分:0)

解决该问题的最简单方法是使用@Transactinal,而不是使用process.env。 Strapi配置只不过是派生常量,因此编写自己的脚本不会给启动trapi带来开销。我假设您正在使用heroku环境变量。如果变量在发布阶段不可用(例如Google App Engine gcp-build),则您需要使用strapi.configdotenv之类的东西或我构建的东西{{3 }}(基于对象的环境加载)。

在使用trapi的bootstrap函数时,我遇到了类似的问题-我需要执行自己的迁移(在stradi land之外),因此我最终编写了自己的knex / bookshelf种子和迁移脚本,这些脚本是手动执行的(

另外,如果您想直接在trapi内部构建迁移脚本,kenv也可能有用。

答案 1 :(得分:0)

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连接,一切开始正常工作!