这是我的应用:price inflation calculator。如果单击“计算”,则可能会收到与服务器相关的错误。当我在Sinatra测试应用程序时,我收到错误说
PG::Error: FATAL: too many connections for role "********"
在调查之后,结果是Heroku limits its free databases to 20 connections。
我想继续在Heroku上开发小应用程序(尤其是数据库驱动的应用程序),但如果我无法绕过这个限制,我可能无法做到。我会花50美元/月来获得一个允许更多连接的数据库,但我还不知道它是否值得。
我的问题是:有没有人知道是否有可能免费解决这个限制,或者是否有可以托管数据库驱动的Sinatra应用程序的Heroku替代品?
以下是我使用的将通胀数据添加到数据库的代码:
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}
答案 0 :(得分:2)
看起来您似乎不需要数据库来完成您在该应用中所需的内容。您是否只是将年费率存储在红宝石代码中的数组中?
$inflation_rates = {"1999" => 2.19, "2000" => 2.97, "2001" => 3.73}
或许我误解了你的应用是如何运作的。
我已经在Heroku上托管了带有数据库的小型Sinatra应用程序而没有任何问题。 20连接限制已足够。你确定它不是你的应用程序的错吗?也许它使用过多的连接?你能发贴你的代码吗?
此外,OpenKeyVal是一个很棒的免费密钥/值数据存储,没有连接限制(唯一的限制是密钥必须低于64KB)。它可能会迫使你改变你的代码,但它至少值得研究。因为您可以使用JSONP调用存储数据,所以您可以构建一个在单个静态html文件中使用数据存储区的应用程序。
答案 1 :(得分:1)
meub的答案表明你将数据存储在数据库之外是合理的,但是如果你觉得你真的想坚持使用数据库,请尝试查看你的应用程序使用这么多连接的原因。
如果您运行select * from pg_stat_database WHERE datname = 'yourdbname'
,'numbackends'字段将告诉您正在为您的数据库建立多少连接。如果您对heroku进行全新部署,然后几次访问您的应用程序,连接数量会增加吗?也许你需要关闭你的连接。
如果在代码末尾添加DB[:cpi_nsa_annual].disconnect
,每次加载页面时连接数是否会停止?