2

これが私のアプリです:価格インフレ計算機。[計算]をクリックすると、サーバー関連のエラーが発生する可能性があります。シナトラでアプリをテストしたところ、次のようなエラーが発生しました

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

調べてみると、Herokuは無料のデータベースを20接続に制限していることがわかりました。

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}
4

2 に答える 2

2

そのアプリでやりたいことを達成するためにデータベースが必要なようには思えません。年間レートをルビーコードの配列に格納することはできませんか?

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

または、アプリがどのように機能するかを誤解している可能性があります。

Herokuでデータベースを使用して小さなSinatraアプリを問題なくホストしました。20接続制限で十分です。あなたはそれがあなたのアプリのせいではないと確信していますか?多分それは過剰な数の接続を使用していますか?コードを投稿してもらえますか?

また、OpenKeyValは、接続制限のない素晴らしい無料のキー/値データストアです(唯一の制限は、キーが64KB未満である必要があることです)。コードを変更せざるを得ないかもしれませんが、少なくとも調べる価値はあります。JSONP呼び出しでデータを保存できるため、単一の静的htmlファイルでデータストアを使用するアプリを構築できます。

于 2012-08-27T23:50:48.517 に答える
1

データベースの外部にデータを保存することを提案するmeubの答えは正しいですが、本当にデータベースを使い続けたいと思う場合は、アプリが非常に多くの接続を使用している理由を調べてみてください。

select * from pg_stat_database WHERE datname = 'yourdbname''numbackends'フィールドを実行すると、データベースに対して行われている接続の数がわかります。herokuに新たにデプロイしてからアプリに数回アクセスすると、接続数は増えますか?おそらく、接続を閉じる必要があります。

コードの最後に追加するDB[:cpi_nsa_annual].disconnectと、ページが読み込まれるたびに接続数が増えなくなりますか?

于 2012-08-28T02:29:53.297 に答える