herokuで普通にgit push heroku masterするとrails db:migrateされません。

下記のbuildpackを使うとENVから指定したコマンドをデプロイ時に実行してくれるのでdb:migrateできます。

gunpowderlabs/buildpack-ruby-rake-deploy-tasks: Run arbitrary rake tasks on deploy to Heroku

$ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-ruby -a your-app-name
$ heroku buildpacks:add https://github.com/gunpowderlabs/buildpack-ruby-rake-deploy-tasks -a your-app-name
$ heroku config:set DEPLOY_TASKS='db:migrate' -a your-app-name

Review AppsのAutomatic Deployをやってる時に便利。

Review.appでの無限ステージング環境をクッソwww快適に使わせて頂いてるんですが、メール内のhost名設定で困ってたら @t-kawa さん、@chiastolite さんが教えてくれました。

あざーす!

% heroku config:get HEROKU_APP_NAME -a kulku-pr-173
kulku-pr-173

取れるじゃな〜い。

staging環境用にconfig/environments/staging.rbをこんな感じにしてみました。

require File.join(__dir__, 'production')

Rails.application.configure do
  config.action_mailer.default_url_options = { host: "#{ENV['HEROKU_APP_NAME']}.herokuapp.com" }
end

これで無限ステージング環境でメールもばっちり。

Cedar-14 is now Generally Available | Heroku Dev Center

cedar-10が11月4日に終了とのことで唯一cedar-10だったこのブログをcedar-14にアップデートしました。

herokuでも放ったらかしで動きづつけるってわけにはいきませんね。たくさんアプリ作っちゃったので定期的にメンテで延命をはかってます。

有料化どうこう以前にピンチ。Herokuが6月16日でbambooスタックの全dynoを停止するそうです。

未だにbambooスタックで動いてたアプリなんてレガシーに決まってるので、普通にcedar-14にするとruby 2.0.0になって動かない。

cedar-14で対応してる最も古いrubyは1.9.3-p551だそうなのでGemfileに明示的に書けばなるべく穏便に移行できます。

source 'https://rubygems.org'
ruby '1.9.3'

Heroku Ruby Support | Heroku Dev Center

Lokkaで沢山作っていたブログなども移行出来てホッとしました。

HerokuのNew Pricingが発表されて実質無料で使い続けることは難しくなりました。このブログも例外ではありません。

「どうせその時がきたら誰かがいい感じの移行先を見つけるだろう。」

「Herokuの大体サービスみたいのが出てくるだろう。」

と思ってましたがそういう気配があまり無い。

社内ツールは基本全部Heroku上に作ってるし(意図せずMicroserviceになってる)、数も沢山あるので頼れる移行先が見つかるまではHerokuにお金を払い、見つかったら移行。ずっと見つからない雰囲気であればDigitalOceanに全部を移行という感じかなと思っています。

できれば無料がいいし、Herokuみたいにgit pushしたらデプロイがいいなと思います(capistranoは糞ダルイ)。

DigitalOceanにHerokuっぽいツールを入れる?

皆さんはどうしようと思っている雰囲気ですか?マジで。

herokuもbuildpackでphpが使えるようになってるのでさくらVPSで運用してた大東亜戦争従軍記をherokuに移行しました。

大東亜戦争従軍記

下記を参考にさせていただいてmysqlのままでClearDB addonを使うパターンでやりました。

blog.handswiz: 言語切り替え機能をつけたwordpressをherokuで動かす

WordPressからWordPressへの移行なので楽ですね。さくらVPSのお金をケチりたかったというのと、スマホで見辛いのでレスポンシブにしたかった。

専用の設定じゃなくてwebhookに送る。

$ heroku addons:add deployhooks:http --url=https://fjord.slack.com/services/hooks/heroku?token=xxxxxxxxxxx

でもこれってpushが終わった瞬間に通知が飛ぶからまだmigrationが終わってなかったりしてお客さんに「まだ反映されてないみたいです」とか言われちゃうから仕事のは個別にhubotで通知したりする。

以前は「アップグレードする方法は無いからapp作り直せ」って書いてあった気がするけど今はある。

$ heroku stack
=== help-me-hackers Available Stacks
  bamboo-mri-1.9.2
  cedar
  cedar-14 (beta)
* bamboo-ree-1.8.7
$ heroku stack:set cedar
$ git push heroku master
$ heroku stack
=== help-me-hackers Available Stacks
  bamboo-mri-1.9.2
  bamboo-ree-1.8.7
  cedar-14 (beta)
* cedar

もっと丁寧にやる方法がちゃんと書いてあるからそちらを参考に・・・。

Migrating to the Celadon Cedar Stack | Heroku Dev Center

Legacy routing EOL on October 20th.

On Ocober 20th 2014 we are turning off the legacy “.heroku.com” routing path.

herokuのbamboo stackが使ってたlegacy routingが廃止されるということで、昔、www無しでアクセスしたい場合に直接IPで指定してた系のサービスがアクセスできなくなった。

U2Plusにも通知が来てたのでメンテしてる@tkawaさんに聞いてみたらGehirnのDNSで対応したらしい。

俺も使ってみたらアラ便利。ALIASレコードが使えて無料で2ドメインまで、レコード無制限ってのは海外含めてあんまり無いんじゃない?

Gehirnって聞くようになってからだいぶ経つのでいきなり無くなる感じはしないし、ええやんけ!

GehirnDNS | ゲヒルンサービスサイト

指定した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経由して節約する。