我可以在哪里/如何托管我的小型、数据库驱动、Sinatra支持的Ruby应用程序?Heroku限制数据库连接



这是我的应用程序:一个价格通胀计算器。如果单击"计算",可能会出现与服务器相关的错误。当我在Sinatra测试该应用程序时,我收到一个错误,说

PG::Error: FATAL: too many connections for role "********"

经过调查,Heroku将其免费数据库限制为20个连接。

我想继续在Heroku上开发小型应用程序(尤其是数据库驱动的应用程序),但如果我无法绕过这个限制,我可能无法做到。我愿意每月支付50美元来获得一个允许更多连接的数据库,但我还不知道这是否值得。

我的问题是:有人知道是否有可能免费绕过这一限制,或者是否有Heroku的替代方案可以托管数据库驱动的Sinatra应用程序?

以下是我使用的将通货膨胀数据添加到数据库的代码:

require 'rubygems'
require 'rest-client'
require 'nokogiri'
require 'sequel'
### MAKE CPI DATABASE ###
db_name = 'DATABASE_NAME_HERE'
DB = Sequel.postgres(db_name,:user=>'USER_NAME',:password=>'PASSWORD',:host=>'HOST',:port=>5432,:sslmode=>'require')
    DB.create_table! :cpi_nsa_annual do
        primary_key :id
        Integer :year
        Float :cpi
    end # DONE: DB.create_table :cpi_nsa_annual do
cpi_annual = DB[:cpi_nsa_annual]
### DONE MAKING CPI DATABASE ###
post_url = "http://data.bls.gov/pdq/SurveyOutputServlet"
post_params = {
    'delimiter'=>'comma',
    'output_format'=>'html',
    'output_type'=>'column',
    'periods_option'=>'all_periods',
    'series_id'=>'CUUR0000SA0',
    'years_option'=>'all_years'
}
if page = RestClient.post(post_url,post_params)
    npage = Nokogiri::HTML(page)
    data = npage.css('table.regular-data tbody tr')
    data.each{|row|
        month_prefix = (row.css('th')[2].text)[0]
        year = row.css('th')[1].text
        month = (row.css('th')[2].text)[1..2]
        cpi = row.css('td').text
        if month_prefix=='M' and month=='13'
                cpi_annual.insert(
                    :year=>year,
                    :cpi=>cpi
                ) # DONE: cpi_annual_insert
                p ["YEAR",year,cpi]
        end # DONE: month_prefix=='M' and month!='13'
    }
end # DONE: if page
p cpi_annual.each{|row| p row}

你似乎真的不需要一个数据库来完成你在该应用程序中想要的东西。难道你不能把年利率存储在ruby代码的一个数组中吗?

$inflation_rates = {"1999" => 2.19, "2000" => 2.97, "2001" => 3.73}

或者我误解了你的应用程序是如何工作的。

我在Heroku上托管过带有数据库的小型Sinatra应用程序,没有遇到任何问题。20的连接限制已经足够了。你确定这不是你的应用程序的故障吗?也许它使用了过多的连接?你能公布你的代码吗?

此外,OpenKeyVal是一个很棒的免费密钥/值数据存储,没有连接限制(唯一的限制是密钥必须低于64KB)。它可能会迫使您更改代码,但至少值得一看。因为您可以使用JSONP调用存储数据,所以您可以在单个静态html文件中构建一个使用数据存储的应用程序。

meub建议您将数据存储在数据库之外的答案是合理的,但如果您觉得自己真的想坚持使用数据库,请尝试了解为什么您的应用程序使用如此多的连接。

如果运行select * from pg_stat_database WHERE datname = 'yourdbname',"numbackends"字段将告诉您有多少连接到数据库。如果你重新部署到heroku,然后访问你的应用程序几次,连接数量会增加吗?也许你需要关闭你的连接。

如果在代码末尾添加DB[:cpi_nsa_annual].disconnect,连接数是否会随着每次页面加载而停止增加?