Heroku上的Node.js:生产环境使用PostgreSQL,开发环境使用SQLite3?

3
我有一个使用Node.js/Rails3的应用程序,我将其托管在Heroku上。当在本地机器或远程生产服务器上运行时,Rails部分可以无缝切换到PostgreSQL和SQLite3。
在本地环境中,Rails框架连接到config/databases.yml中定义的SQLite3数据库,当我推送到Heroku时,部署脚本会覆盖此设置以进行生产环境配置。
我的Node.js脚本没有框架,因此Heroku无法钩入并确保我在生产环境中使用正确的数据库。
如何使我的Node.js脚本像我的Rails应用程序一样,在开发和生产环境之间无缝切换?

注意,在Brandon的答案中看到评论。 - Jordan Feldstein
1个回答

5

Heroku通过 DATABASE_URL 环境变量提供了一个数据库URL,您可以连接到该URL。以下是来自 Heroku开发中心文档 的相关部分。

Using a Postgres Database

To add a PostgreSQL database to your app, run this command:

$ heroku addons:add shared-database

This sets the DATABASE_URL environment variable. Add the postgres NPM module to your dependencies:

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

And use the module to connect to DATABASE_URL from somewhere in your code:

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,转而使用全Rails项目。所以对我来说这个问题已经无关紧要了。但为了其他人的参考,我们仍然可以找到一个答案,如果它有效的话,我保证会接受它。= ^] - Jordan Feldstein
正如mu在对OP的评论中指出的那样,最好在两个环境中都使用PostgreSQL,然后实现这个解决方案会更容易。 - Jordan Feldstein
确实。为了解决这个问题,你可以在Heroku上定义自己的环境变量(如文档中所示),并在启动时检查它;如果存在或设置为PRODUCTION(或其他值),则使用Heroku端口;否则使用一些开发环境,可能是通过配置文件定义的(与RAILS_ENV非常相似)。 - Michelle Tilley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接