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

在哪里/如何托管我的小型、数据库驱动、Sinatra驱动的Ruby应用程序?Heroku限制数据库连接,ruby,database,heroku,hosting,sinatra,Ruby,Database,Heroku,Hosting,Sinatra,这是我的应用程序:a。如果单击“计算”,可能会出现与服务器相关的错误。当我在Sinatra测试应用程序时,我得到一个错误 PG::Error: FATAL: too many connections for role "********" 经过调查,结果是 我想继续在Heroku上开发小型应用程序(尤其是数据库驱动的应用程序),但如果我无法绕过这个限制,我可能无法做到。我会每月支付50美元来获得一个允许更多连接的数据库,但我还不知道这是否值得 我的问题是:是否有人知道是否有可能免费绕过这一限制

这是我的应用程序:a。如果单击“计算”,可能会出现与服务器相关的错误。当我在Sinatra测试应用程序时,我得到一个错误

PG::Error: FATAL: too many connections for role "********"
经过调查,结果是

我想继续在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连接限制已经足够了。你确定这不是你的应用程序的错误吗?可能是使用了过多的连接?你能把你的密码寄出去吗


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

meub的回答是,建议您将数据存储在数据库之外是合理的,但如果您真的想坚持使用数据库,请尝试了解您的应用程序使用如此多连接的原因

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


如果您添加了
DB[:cpi\u nsa\u annual]。在代码末尾断开连接
每次页面加载时连接数是否停止增加?

您知道,在我发布此消息后不久,我开始考虑使用哈希键系统,因为每年的通货膨胀数据更新速度非常慢。虽然我希望以后能添加更多的数据,但这可能需要比散列键更大、更快、更灵活的数据……无论如何,很抱歉忘记发布代码。我将编辑我的帖子以包含它。你也可以将数据存储为JSON或CSV并加载(假设数据是静态的)。尽管Ruby代码可能加载速度最快。这取决于你需要做什么来平衡更新的易用性和数据量。哦!当然是的,添加DB.disconnect似乎可以解决问题。我将代码添加到数据库修改脚本以及Sinatra中。我对Sinatra one使用了“after do”语句(即“after do DB.disconnect end”)@user1626730太棒了!很高兴它能起作用:)在完成后使用
听起来很不错。@user1626730记住对您觉得有用的问题和答案进行投票-这有助于堆栈溢出,将最有用的内容放在顶部。