【问题标题】:Node.js on Heroku: PostgreSQL on prod, SQLite3 on dev?Heroku 上的 Node.js:产品上的 PostgreSQL,开发上的 SQLite3?
【发布时间】:2011-11-19 03:04:32
【问题描述】:

我在 Heroku 上托管了一个 Node.js/Rails3 应用程序。当它在我的本地机器或远程生产机器上运行时,rails 部分在 PostgreSQL 和 SQLite3 之间无缝切换。

在本地,rails 框架连接到config/databases.yml 中定义的 SQLite3,当我推送到 Heorku 时,部署脚本会用它们的生产设置覆盖它。

我的 node.js 脚本没有 Heroku 可以连接的框架,并确保我在生产环境中使用了正确的数据库。

如何让我的 node.js 脚本像我的 Rails 应用程序在开发和生产环境之间无缝移动一样“正常工作”?

【问题讨论】:

  • 已注意到,请参阅 Brandon 回答中的评论。

标签: ruby-on-rails deployment node.js heroku


【解决方案1】:

Heroku 公开了一个数据库 URL,您可以通过 DATABASE_URL 环境变量连接到该 URL。这是Heroku Dev Center docs的相关部分。

使用 Postgres 数据库

要将 PostgreSQL 数据库添加到您的应用,请运行以下命令:

$ heroku addons:add shared-database

这将设置DATABASE_URL 环境变量。将postgres NPM 模块添加到您的 依赖:

"dependencies": {
  ...  
  "pg": "0.5.4"
}

并使用该模块从代码中的某处连接到DATABASE_URL

var pg = require('pg');

pg.connect(process.env.DATABASE_URL, function(err, client) {
  var query = client.query('SELECT * FROM your_table');

  query.on('row', function(row) {
    console.log(JSON.stringify(row));
  });
});

【讨论】:

  • 这在我的生产环境中运行良好,但没有考虑到我在开发中使用 sqlite3。事实上,我实际上已经放弃了 Node,转而支持全轨项目。所以这个问题对我来说没有意义。还是找个答案吧,供大家参考,如果可行我保证采纳。 =^]
  • 由于 mu 在对 OP 的评论中指出的太短,因此在两种环境中使用 PostgreSQL 可能会更容易,然后实施此解决方案。
  • 确实如此。不过,为了解决这个问题,您可以在 Heroku 上定义自己的环境变量(如文档中所示)并在启动时检查它;如果它存在或设置为PRODUCTION(或其他),请使用 Heroku 端口;否则使用一些开发环境,可能通过配置文件定义(非常类似于RAILS_ENV)。
猜你喜欢
  • 2020-05-23
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 2012-06-01
  • 2013-04-19
  • 2012-07-25
  • 1970-01-01
  • 2012-02-05
相关资源
最近更新 更多