Heroku

デメリット/向いてない用途

記事:


無料プラン廃止

git push時のsshの廃止、httpへの切り替え


slack等への通知


heroku redis v6の有料プランでTLS接続が必須になる


ログをS3へ転送


Billing/Invoice(請求書)


ACM(Automated Certificate Management): SSL証明書の自動更新


監視/Monitoring

一部の項目のEmail通知はあるので、SlackのEmailインテグレーションを使えば通知はできる。

外部Addonを使う方法が一般的だろうが、metricsをAPIで取得する方法が不明


Can't find the 'libpq-fe.h header

gem install pg
...
Can't find the 'libpq-fe.h header

固定IPを使う

herokuはAWSベースでデフォルトでは固定IPが無いため、herokuからホストにアクセスするケースで、ホスト側でIP制限をするのが困難。
そのため有料Addonがある


CURLからRESTリクエストを投げる


addonのidを調べる

HEROKU_TOKEN=$(heroku auth:token)
HEROKU_APP=app-id

curl -X GET https://api.heroku.com/apps/$HEROKU_APP/addons \
 -H "Accept: application/vnd.heroku+json; version=3" \
 -H "Authorization: Bearer $HEROKU_TOKEN"

herokuアプリケーション名の変更


ログをhttpsで受信する


SSL Heartbleed bug対応


PostgreSQLのバージョンアップ方法


PostgreSQLのバージョン確認

heroku pg:info -r staging -app [YOUR APP ID]

カスタムドメインを設定する


httpsの場合

httpとは違うendpointが割り当てられる。

  1. ssl:endpointアドオンの追加
    heroku addons:add ssl:endpoint --app YOUR-APP
  2. SSL certificateの追加
    heroku certs:add www.example.com.key www.example.com.crt --app YOUR-APP
  3. カスタムドメインの登録
    heroku domains:add www.example.com --app YOUR-APP
    
    heroku domains --app YOUR-APP
    
    Endpoint                  Common Name(s)                        Expires               Trusted
    ------------------------  ------------------------------------  --------------------  -------
    YOUR-APP.herokussl.com    www.example.com                       2010-01-01 01:00 UTC  True
  4. DNSレコードの追加
    www.example.com CNAME YOUR-APP.herokussl.com

httpの場合

  1. カスタムドメインの登録
    heroku domains:add www.example.com --app YOUR-APP
    
    heroku domains --app YOUR-APP
    
    === YOUR-APP Domain Names
    YOUR-APP.herokuapp.com
    www.example.com
  2. DNSレコードの追加
    www.example.com CNAME YOUR-APP.herokuapp.com.

railsのアップデート

セキュリティアップデート等でバージョンを上げる場合。
heroku側で新しいバージョンとアップグレード方法が記載されたメールが来る


ログをrsyslogで受信する


テーブル単位のインポート/エクスポート


addon

# すべてのアドオン一覧
heroku addons:list

# インストール済みアドオンの一覧
heroku addons

# add
heroku addons:add newrelic:standard

# remove
heroku addons:remove newrelic:standard

# upgrade(有料)
heroku addons:upgrade newrelic:professional

# アドオンヘルプをブラウザで開く
heroku addons:open newrelic

AmazonRDS


SendGrid


heroku-postgresql

デフォルトDBはPostgreSQLなのでそれに接続するアドオン


Airbrake(Hoptoad)

New Relic


PG Backups


以下古い情報

Heroku Postgres


ClearDB MySQL Database

pd_dump pg_restoreを使うためにPostgreSQLをインストール

PG Backups でpg_dump, pg_restoreを使うためには、PostgreSQLをherokuと同じバージョンにする必要がある。
2012-10-04 (木) 11:57:19現在heroku側:9.1.6、yum:"8.4.13"ではpg_dumpの再にバージョン違いで怒られる


ERROR:BIGINTを含むテーブルをdb:pushした場合にINTEGERに変わってしまいrange over


テーブルの作成/変更


ruby1.9.2, rails3.2.8のdeproy

rvmsudo gem install heroku taps sqlite3 execjs therubyracer

rails new catalog
cd catalog

# 以下を最後に追加
vi Gemfile
----
gem 'execjs'
gem 'therubyracer'
----
bundle install --without production

rails server
# http://localhost:3000/ をブラウザで開いて見る。Ctrl+Cで中止

# gitにcommit
git init
git add .
git commit -m "Init"

# herokuでは production は"pg"に変える必要がある。
vi Gemfile
----
group :production do
  gem "pg"
end
group :development, :test do
  gem 'sqlite3'
end
----

# gemライブラリーのバージョンエラーのメッセージが出る場合は Gemfile.lock を一度削除。bundle installコマンドで再生成される
rm Gemfile.lock
bundle install --without production
rails server

# heroku
heroku create
git add Gemfile.lock
git commit Gemfile Gemfile.lock
git push heroku master
# または
git push git@heroku.com:[アプリケーション名].git master --force

# dbを利用するテスト
rails generate scaffold Product name:string price:float url:string
rake db:migrate
rake db:seed
rm public/index.html
vi config/routes.rb 
----
root :to => 'products#index' 
----
# ローカルで動作確認。http://localhost:3000/ をブラウザで開いてレコードの追加、編集、削除等をやってみる
rails server

# gitにコミット
git add .
git rm public/index.html
git commit -m "Scaffold products"

# herokuに送信
git push heroku master
# heroku db 作成
heroku run rake db:migrate
# heroku db 初期値インポート
heroku run rake db:seed

Taps Server Error: PGError


Invalid RUBY_VERSION specified:


ブラウザでアプリケーション名を変更した場合、console側の名前も合わせる


アプリの移設

  1. 新しいアプリの準備
    # 新しいアプリを取得
    git clone git://github.com/heroku/ruby-sample.git new-app
    cd new-app/
    
    # heroku作成
    heroku create --remote cedar new-app
    http://obscure-sierra-8167.herokuapp.com/ | git@heroku.com:obscure-sierra-8167.git
    Git remote cedar added
    
    # 別名 heroku として登録
    git remote add heroku git@heroku.com:obscure-sierra-8167.git
  2. 新しいアプリのデプロイ
    git push heroku master
  3. 古いアプリを停止
    heroku maintenance:on --app old-app
  4. DBの移行
    # 新旧アプリにpgbackupsを追加
    heroku addons:add pgbackups:auto-week --app old-app
    heroku addons:add pgbackups:auto-week --app new-app
    
    # 新しいアプリに新規DBを用意
    heroku-postgresql:dev
    HEROKU_POSTGRESQL_[COLOR]_URL
    
    # old-app をS3へエクスポート
    heroku pgbackups:capture --expire --app old-app
    
    # 新しいDBにS3からインポート
    heroku pgbackups:restore HEROKU_POSTGRESQL_[COLOR]_URL `heroku pgbackups:url --app old-app` --app new-app
    
    # 新しいDBをデフォルト(DATABASE_URL)に切り替え
    heroku pg:promote HEROKU_POSTGRESQL_[COLOR]_URL
    
    # プロセスを再起動
    heroku restart
  5. ドメイン設定。重複が許可されないため、古いほうを削除し新しいほうに付け替える
    # 古いアプリのドメインを削除
    heroku domains:remove "www.example.com" --app old-app
    
    # 新しいアプリにドメイン追加
    heroku domains:add "www.example.com" --app new-app
  6. 検証
  7. DNS切り替え

アカウント登録

  1. https://api.heroku.com/signup からユーザ登録。メールアドレスが必要
  2. 認証メールが届くのでクリック
  3. パスワードの設定
  4. heroku Toolbeltインストール(ruby, gitはインストール済みとする)
    rvmsudo gem install heroku
    
    # ログイン(初回だけ) 公開鍵が無ければ作ってくれる
    heroku login
    Enter your Heroku credentials.
    Email: example@example.com
    Password (typing will be hidden): 
    Could not find an existing public key.
    Would you like to generate one? [Yn] y
    Generating new SSH public key.
    Uploading SSH public key /home/hoge/.ssh/id_rsa.pub... done
    Authentication successful.
  5. サンプルプロジェクト作成
    git clone git://github.com/heroku/ruby-sample.git
    cd ruby-sample
    heroku create
    git push heroku master
  6. URLをブラウザで開いてみる「Hello, world」が表示されたら成功
    # GUI環境
    heroku open
    
    
    # CUI環境ではURLをコピーしてブラウザに貼り付け
    heroku info
    
    === guarded-coast-1989
    Git URL:       git@heroku.com:guarded-coast-1989.git
    Owner Email:   example@example.com
    Repo Size:     1M
    Slug Size:     1M
    Stack:         cedar
    Web URL:       http://guarded-coast-1989.herokuapp.com/

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-09-17 (火) 15:01:52