【问题标题】:Sails js connection reverts to development when deployed on heroku部署在heroku上时,Sails js连接恢复为开发
【发布时间】:2015-02-08 00:04:12
【问题描述】:

我一直在尝试使用 mongolab 作为我的 mongodb 在heroku 上部署我的sails 应用程序。

我使用了以下连接,一个用于开发,一个用于生产:

    local_mongo : {
    adapter  : 'sails-mongo',
    host     : 'localhost',
    port     : 27017,
    database : "something"
},

  heroku_mongolab : {
     adapter   : "sails-mongo",
     url       : "mongodb://*****:******!@ds063160.mongolab.com:63160/something"
  }

我还设置了我的 local.js 文件以使用开发环境并将该文件放在 gitignore 上。

最后在我的 development.js 上,我执行以下操作

module.exports = {
   models: {
       connection: 'local_mongo'
     }
};

在我的 production.js 上

module.exports = {

/***************************************************************************
 * Set the default database connection for models in the production        *
 * environment (see config/connections.js and config/models.js )           *
 ***************************************************************************/

models: {
   connection: 'heroku_mongolab'
}

/***************************************************************************
 * Set the port in the production environment to 80                        *
 ***************************************************************************/

//port: 80

/***************************************************************************
 * Set the log level in production environment to "silent"                 *
 ***************************************************************************/

//log: {
//   level: "silent"
//}

};

在我的 package.json 上,我将启动脚本更改为 node app.js --prod。在本地运行时,即使我运行 npm start,一切都按预期运行,但是当我在 heroku 上部署并查看日志时,我发现它尝试连接到 localhost mongodb。

这是一个错误还是我做错了什么?

【问题讨论】:

    标签: node.js heroku sails.js


    【解决方案1】:

    您必须使用 Procfile。在应用程序的根目录中创建一个名为“Procfile”的文件,以明确声明应执行什么命令来启动应用程序。在您的情况下,要定义生产环境,请添加以下行:

    web: NODE_ENV=production node app.js

    【讨论】:

      【解决方案2】:

      如果你想让 Heroku 在生产环境中运行你的应用程序,你必须如下设置环境变量:

      heroku config:set NODE_ENV=production
      

      【讨论】:

      • 我尝试了您的建议,但它不起作用。我可以让它工作的唯一方法是当我注释掉本地连接时。然后它工作得很好,但是当有一个完整的功能来实现我想要做的事情时,做这样的事情似乎有点奇怪。
      • 其实config/local.js默认包含在.gitignore文件中。该文件用于本地环境设置。您应该将您的heroku_mongolab 添加到config/connections.js。这意味着您的本地连接 local_mongo 不应该在 Heroku 中。
      • 我发现并修复了它,但它不应该与多个连接一起使用吗?这不就是开发和生产模式的全部目的吗?
      • 其实应该的。但我没有足够的数据来弄清楚。您的代码是否托管在某个地方?
      • @YedhuKrishnan 是对的; local.js 文件是为了顾名思义:特定系统的本地设置,即单台计算机。它总是会覆盖所有其他设置,但这通常不是问题,因为它不受版本控制,因此不会部署到其他环境或在开发人员之间共享。如果它出现在 Heroku 上,那么它要么已从您的 .gitignore 中删除,要么您没有通过 git 进行部署。
      猜你喜欢
      • 1970-01-01
      • 2016-05-25
      • 2015-07-15
      • 1970-01-01
      • 2012-07-02
      • 2021-08-18
      • 2022-08-15
      • 2021-10-08
      • 2020-11-12
      相关资源
      最近更新 更多