指定したIPからの接続しか受け付けない(古いタイプの)システムと連携したい場合にHerokuだと困る。

ProximoというAddonは固定IP付きのproxyを提供してくれる。rest-clientとかで接続するときにproximoの提供するproxyを設定してリクエストすればOK

require "rest-client"

RestClient.proxy = ENV["PROXIMO_URL"]
res = RestClient.get("http://api.someservice.com/endpoint")

puts "status code", res.code
puts "headers", res.headers

これで固定IP + https + 証明書が必須なシステムとかとも連携できる。httpsの通信をhttp proxy経由で可能かな?とちょっと心配だったけどproxyは中身知らんぷりでそのまま転送するので大丈夫。

proximoはリクエスト数がPlan毎に決まってるので必要なリクエストでだけproxy経由して節約する。

mysqlとかよりroleとか色々うるさいので面倒ですよね。

$ curl `heroku pgbackups:url a001` > foo.dump
$ PGPASSWORD=XXXXX pg_restore --verbose --clean --no-acl --no-owner -U foo -d foo_development foo.dump

herokuのbamboo stackからcedar stackへのアップグレードは無理なので新規に作ってDBを移行後ドメインを切り替えた。

tapsを使ったdb:pull/db:pushはruby1.9.2とruby.19.3の間のmarshal互換性の断絶で無理なので(このbamboo stackはruby1.9.2で動いてる)pgbackups(pg_dump)を使う。

pgbackupsを使ってpg_dumpを取得したあと、postgres.heroku.comの下記の右側にある矢印アイコンのメニューの中のpg_restoreを選ぶとrestoreコマンドが親切に出るのでそれでさっきのdumpを読み込んで完了。

Lokkaももうちょっとドラスティックに変えていこうかなと思っています。仕事外の時間でちまちまと進めます。

herokuでsmtpを使うためにsendgrid addonを入れる。(smtpにgmailを使う場合は要らない)

$ heroku addons:add sendgrid:starter
# config/environment.rb:

(snip)

ActionMailer::Base.smtp_settings = {
  :address        => 'smtp.sendgrid.net',
  :port           => '587',                                                                                            
  :authentication => :plain,
  :user_name      => ENV['SENDGRID_USERNAME'],                                                                         
  :password       => ENV['SENDGRID_PASSWORD'],                                                                         
  :domain         => 'heroku.com',
  :enable_starttls_auto => true
}
# config/initializers/exception_notification.rb:
AppName::Application.config.middleware.use ExceptionNotification::Rack,
  :email => {
    :email_prefix => "[AppName] ",
    :sender_address => %{"notifier" <notifier@example.com>},
    :exception_recipients => %w{komagata@example.com}
  }
# Gemfile:
gem 'exception_notification'
# config/environments/production.rb:

(snip)

  # config.action_mailer.raise_delivery_errors = false
  config.action_mailer.raise_delivery_errors = true

(snip)

  config.action_mailer.perform_deliveries = true
end
$ heroku labs:enable user-env-compile

これすると行ける。理由はわからん・・・。

Herokuでwww.foo.comとかじゃなくfoo.comのようなrootドメインを使うのは面倒です。 (root, naked, bare, zone apex domainなど色んな呼び方があるのもググり辛くて面倒な要因)

以前は「このIPをAレコードに設定してね」と公式ドキュメントにも書いてあったのですが現在は「SimpleDNSなどの仮想Aレコード的なものが使えるサービスを使え、もしくは逆に考えるんだ。rootドメインなんて使わなくってもいいさ・・・と。」と書いてあります。

そんなジョースター卿のような逆転の発送はなかなかできませんし、SimpleDNSは$3/moだったりしてちょっと高い。

ところが12レコードまで無料でHeroku向け設定をポチッとやってくれるDozensというサービスを発見。

DNSを自由に簡単に。Dozens(ダズンズ)

ワーオ!Add Heroku Records?なんていうチェックボックスがあるぞ!

こいつはくせえ、名サービス以上の匂いがプンプンするぜ!

お名前.comのDNSなんて使ってる場合じゃねえ!

rake db:resetがherokuではできないので下記。

$ heroku pg:reset DATABASE_URL --confirm my-app

ceder stackバージョン。

ほぼ下記のまんまです。

Creating Static Sites in Ruby with Rack | Heroku Dev Center

$ mkdir -p public/{images,js,css}
$ touch site/{config.ru,public/index.html}
# Gemfile:
source :rubygems
gem 'rack'
# config.ru:
use Rack::Static,
  urls: ['/images', '/js', '/css'],
  root: 'public'

run lambda { |env|
  [
    200,
    {
      'Content-Type'  => 'text/html',
      'Cache-Control' => 'public, max-age=86400'
    },
    File.open('public/index.html', File::RDONLY)
  ]
}

komagata.orgはまんまコレなのでソースへのリンクも置いておきます。heroku便利ですね。

komagata/komagata-org · GitHub

会社のインターンに@CheerDreams@hrysdが来てくれたのでPivotalのユーザー数が上限超え。

Account Plans - Pivotal Tracker

ん”ー、どうする?とりあえずPivotal cloneのFulcrumを試してみました。

% git clone git://github.com/malclocke/fulcrum.git
% cd fulcrum
% heroku create fulcrum-fjord-jp
% heroku add ons:add shared-database
% heroku add ons:add pgbackups:auto-month
% heroku config:add MAILER_SENDER=noreply@fjord.jp
% heroku add ons:add send grid:starter
% git push heroku master
% heroku run rake db:setup
% heroku domains:add fulcrum.fjord.jp
% heroku open

Fulcrum

ちょっと使ってみます。

コレをHerokuに移しました。

何よりも「僕が12時に起きてパソコンを立ち上げていないと動かない」という致命的な問題への対応です。

他の人も登録可能にすれば便利かな?誰か頼む・・・。

komagata/random_lunch - GitHub