ネットサービスとかGoogleとか豆知識とか。

プログラミング
2015年02月26日 06:27
heroku pg:pull 実行時に「FATAL: Ident authentication failed for user」というエラー

スポンサード リンク

Heroku 上の PostgreSQL データベースのデータをローカルの開発環境の PostgreSQL にダンプしようとしてハマった。

対象のアプリが古くて開発環境では SQLite を使っており、開発環境に PostgreSQL をインストールしたばかりという状況だったので状況としては特殊かもしれない。

症状

heroku pg:pull のコマンドを実行すると pg_restore のところで「FATAL: Ident authentication failed for user」というエラーが出て止まる。

原因

  • 開発環境の PostgreSQL にパスワードなしのユーザーを作成した
  • pgsql コマンドに「-h localhost」をつけた際に認証が失敗する状態になっていた

対処

PostgreSQL/localhostを指定すると接続できない場合の対処方法 - 調べる.db」を参考に pg_hba.conf ファイルの内容を修正。

具体的には「host all all 127.0.0.1/32 ident」となっている行の「ident」を「trust」に変更する。

# IPv4 local connections:
#host    all             all             127.0.0.1/32            ident
host    all             all             127.0.0.1/32            trust

修正後、保存して postgresql を再起動。

なお CentOs 6.5 など IPv6 が有効になっている場合は、「::1/128」の行のほうの「ident」を「trust」に変更するようにします。

調査

heroku pg:pull コマンド実行時のエラー部分のログは以下の通り。

pg_dump: dumping contents of table messages
pg_restore: connecting to database for restore
pg_restore: [archiver (db)] connection to database "mylocaldb" failed: FATAL:  Ident authentication failed for user "vagrant"
pg_restore: mylocaldb aborted because of error
psql: FATAL:  Ident authentication failed for user "vagrant"
 !    Heroku client internal error.
 !    Search for help at: https://help.heroku.com
 !    Or report a bug at: https://github.com/heroku/heroku/issues/new

    Error:       psql failed. exit status 512, output: "" (RuntimeError)
    Command:     heroku pg:pull HEROKU_POSTGRESQL_COBALT mylocaldb --app ***
    Version:     heroku-toolbelt/3.27.1 (x86_64-linux) ruby/1.8.7
    Error ID:    c6be0ded672f41b69bb893e2e4db73cb


    More information in /home/vagrant/.heroku/error.log

認証まわりのエラーというのは見れば分かるのだが、パスワードなしのユーザーなのになぜ認証に失敗しているのか、意味が分からない。

よく見ると最終行に ~/.heroku/error.log に詳細な情報が書きだされているとあったのでそのログを見てみた。ちなみにこの「More information in /home/vagrant/.heroku/error.log」に気づくのに時間がかかった。

.heroku/error.log の内容は以下の通り。

Heroku client internal error.
psql failed. exit status 512, output: ""
/home/vagrant/.heroku/client/lib/heroku/command/pg.rb:617:in `exec_sql_on_uri'
/home/vagrant/.heroku/client/lib/heroku/helpers/pg_dump_restore.rb:108:in `send'
/home/vagrant/.heroku/client/lib/heroku/helpers/pg_dump_restore.rb:108:in `exec_sql_on_uri'
/home/vagrant/.heroku/client/lib/heroku/helpers/pg_dump_restore.rb:89:in `verify_extensions_match'
/home/vagrant/.heroku/client/lib/heroku/helpers/pg_dump_restore.rb:28:in `verify'
/home/vagrant/.heroku/client/lib/heroku/helpers/pg_dump_restore.rb:16:in `execute'
/home/vagrant/.heroku/client/lib/heroku/command/pg.rb:359:in `pull'
/home/vagrant/.heroku/client/lib/heroku/command.rb:223:in `send'
/home/vagrant/.heroku/client/lib/heroku/command.rb:223:in `run'
/home/vagrant/.heroku/client/lib/heroku/cli.rb:40:in `start'
/usr/local/heroku/bin/heroku:24

lib/heroku/command/pg.rb の 617 行目でエラーになっている。該当箇所は以下のメソッド。

  def exec_sql_on_uri(sql,uri)
    begin
      ENV["PGPASSWORD"] = uri.password
      ENV["PGSSLMODE"]  = (uri.host == 'localhost' ?  'prefer' : 'require' )
      user_part = uri.user ? "-U #{uri.user}" : ""
      output = `#{psql_cmd} -c "#{sql}" #{user_part} -h #{uri.host} -p #{uri.port || 5432} #{uri.path[1..-1]}`
      if (! $?.success?) || output.nil? || output.empty?
        raise "psql failed. exit status #{$?.to_i}, output: #{output.inspect}"
      end
      output
    rescue Errno::ENOENT
      output_with_bang "The local psql command could not be located"
      output_with_bang "For help installing psql, see https://devcenter.heroku.com/articles/heroku-postgresql#local-setup"
      abort
    end
  end

変数 output に実行結果を格納しているコマンドが原因っぽいので、そのコマンドを出力してみると以下のようなものだった。

"command psql -c \"SELECT extname FROM pg_extension ORDER BY extname;\"  -h localhost -p 5432 mylocaldb"

このコマンドをシェル上で直接実行してみると、

$ psql -c "SELECT extname FROM pg_extension ORDER BY extname;"  -h localhost -p 5432 mylocaldb
psql: FATAL:  Ident authentication failed for user "vagrant"

確かにエラー。PostgreSQL の認証エラーについて色々調べてるときに -h localhost をつけるつけないといった話があったので試しに外して実行してみると、

$ psql -c "SELECT extname FROM pg_extension ORDER BY extname;" -p 5432 mylocaldb
 extname 
---------
 plpgsql
(1 row)

エラーにならない!というわけで原因が判明した。。

柴田淳
2015年02月25日 04:30
しばじゅんバラエティ初出演「今夜くらべてみました」は3月3日まで無料配信中

スポンサード リンク

昨日放送の「徳井と後藤と麗しのSHELLYが今夜くらべてみました」を見逃してしまった方、録画し損ねてしまった方へ。

こちらの番組、日テレ公式の「日テレいつでもどこでもキャンペーン」にて放送後1週間限定で無料配信されています。(番組公式サイトにも動画が埋め込まれてるのでそこから視聴も可。)

この見逃し配信はパソコンからだと Flash Player が必要。スマホ向けの「日テレ動画プレイヤー」というアプリもあるので、それを使ってスマホから視聴することも可能です。Flash は脆弱性が多いのでもうインストールしてないよって人もいるかもしれませんし。

» 日テレ動画プレイヤー - Google Play の Android アプリ
» iTunes の App Store で配信中の iPhone、iPod touch、iPad 用 日テレ動画プレイヤー

それにしても、しばじゅんバラエティ番組初出演だったそうですが、かなりぶっちゃけてて面白すぎました。しばじゅんはパンダなの・・・。

あと番組中で「暗すぎる歌姫」「歌詞が暗い」と紹介されてたためにうたまっぷの歌詞検索最新ランキングでレミオロメンの3月9日をおさえて1位と2位にランクインw

utamap-shibajun.jpg

番組は3月3日の午後11時58分まで配信されてるので、見逃した方はぜひどうぞ。

バビルサの牙【初回限定盤プラチナSHM】
バビルサの牙【初回限定盤プラチナSHM】 (ビクターエンタテインメント)

グルメ
2015年02月20日 23:44
一風堂の赤丸に海老が使われてた

寒いのでラーメンでも食べて温まろうかと一風堂に行って赤丸新味を食べたのですが、なんだか食べてる最中から喉に痛みが。

自分は昔から背骨のない魚介類がアレルギーで、食べると喉が痛くなるという体質なのです。背骨のない魚介類というのはエビやタコ、イカ、貝、カニなどなど。喉の痛みは30分くらいでおさまるのでひどいアレルギーではないのですが、普段から食べないようにしています。

で、やっぱりラーメンを食べてから30分くらい喉の痛みが続いて、しばらくしておさまったのでこりゃ怪しいなぁと。一風堂のラーメンは豚骨なのでそんな心配はしてなかったのですが。サイトでメニューを見てみましたが、そのような説明はありません。

ippudo-ebi-01.jpg

↑ メニューには魚介の記述はなし。

ということは隠し味的に使われてるのかなと思ってアレルギー情報を見てみると、

ippudo-ebi-02.jpg

↑ 赤丸のほうに「えび」が入ってた・・・。

あと「ハカタノチカラ飯」というメニューにも海老が使われてるみたいです。

そういえば昨年一風堂に行ったときに赤のほうを食べて、やっぱりシーフード成分を感じたような、そんな記憶が・・・。まったく忘れていましたが。白丸のほうには海老は入ってないようなので、今度からは白丸を注文するようにします。

アレルギーがひどい人は普段から気をつけてるかもしれませんが、ご注意ください。

博多一風堂 赤丸白丸セット 2673 0332328
博多一風堂 赤丸白丸セット 2673 0332328

ユーザビリティ
2015年02月19日 12:27
スワイプでブックマークボタンが出てくるのだが

はてなブックマークのiPhoneアプリを使っていて、なにげなくテーブルビューをスワイプしてみたらブックマークアイコンが出てきた。

hatena-bookmark-ios-swipe.jpg

↑ これは気づかない。

個人的にもスワイプしたら何か出てくるようなインタフェースを作りたいと思うことがあるけど、やっぱり何も手がかりがない状態ではスワイプ操作は気づかれないなと思う。

ついでに気づいた点として、

  • スワイプして出てくるブックマークボタンをタップしてもフィードバックがないのでブックマークできたのかどうかが分からない。
  • 設定で Twitter 連携をオンにしてたら Twitter に同時投稿されてた。(確認がない)
  • ブックマークボタンの左隣のアイコンが何のアイコンなのかわからない。

おもしろグッズ
2015年02月18日 00:41
ディズニー: ツムツムの金太郎飴っぽいキャンディー

ディズニー好きの女子からもらいました。

tsum-tsum-candy-01.jpg

↑ ツムツムのキャンディーです。

tsum-tsum-candy-02.jpg

↑ スティッチがパイン味で、ドナルドがサイダー味だそうです。

tsum-tsum-candy-03.jpg

↑ 個別に見るとこんな感じw

tsum-tsum-candy-04.jpg

↑ ドナルドさん・・・

ま、でも金太郎飴っぽいかわいいキャンディーですね。作業の合間にいただきます!

プーさんバージョンもありますよ。

ネットサービス
2015年02月17日 14:20
AWSの料金が日本円で支払い可能になった

今のところ Visa と MasterCard によるクレジットカードに限定されているようですが、AWS の利用料金が日本円で表示および支払えるようになってます。

aws-yen-pay-01.jpg

↑ プルダウンの「My Account」からアカウント設定画面へ。

aws-yen-pay-02.jpg

↑ 英語で表示されてるので画面右下の言語設定から「日本語」を選択すると分かりやすくなります。(この設定は保存できないのだろうか?)

aws-yen-pay-03.jpg

↑ 「現地通貨設定」(Local Currency Preference)から日本円など12カ国の通貨に変更できます。

aws-yen-pay-04.jpg

↑ ダッシュボードの料金も日本円に。為替レートは概算です。

なお日本円に換算されて表示されるのは合計の料金のみで、サービス別の利用料や過去の請求書などはこれまで通りドルで表示されています。

» Amazon Web Services ブログ: 【AWS発表】 AWSアカウントへの支払い通貨の設定機能