Herokuでやってみた!

Herokuは良いねー。ってことで、やってみた事のメモね!

後でまとめるとして、とりあえずメモ

  • まずは、Herokuで公開
    heroku create 公開アプリ名
    
    • ここによると、2012/02現在ではまだHerokuの標準がRails3.2対応されてないから、以下のようにcedarを使ってcreateしないと駄目っぽい
      heroku create 公開アプリ名 --stack cedar
      
      • おー、2012/06/20時点で、Cedarがデフォルトになったとのご連絡が!やった!
    • で、出力されたurlとgit名をメモ。
    • このアプリ名は、英数字とハイフンのみ有効で、そのままURLに使われるよ。
  • 以下のような、開発SQLite3と本番PostgreSQL用の設定の修正をGemfileに行う
    group :production, :staging do
      gem 'sqlite3-ruby', :require => 'sqlite3'
      gem 'pg'
    end
    group :development, :test do
      gem 'sqlite3'
    end
    
    • 今後、開発用のbundleは以下のコマンドね!
      bundle install --without production
      
  • 後は、以下のコマンドでpush
    • git環境がWindowsとUbuntuで違うから、とりあえず、こんな感じにしてみよう
    • まずは、Windows用のコマンド
      heroku config:add RACK_ENV=production
      heroku keys:add "C:\Documents and Settings\ここはあなたのユーザ名ね!\.ssh\id_rsa.pub"
      git remote rm heroku
      git remote add heroku メモしたgit名(git@heroku.com:******.git)
      git push heroku master
      
      • 結局、git系はWindowsでやることにしたよ。Aptana使うからなー。
    • で、Ubuntu用の設定とDBのセットアップもしておこう
      heroku keys:add /home/ここはあなたのユーザ名ね!/.ssh/id_rsa.pub
      heroku rake db:migrate
      
      • うむむむ。cedarだと、runがいるらしい。
        heroku run rake db:migrate
        
      • 一旦、DBセットアップ後、初期化してやる場合は、resetね。
        heroku rake db:reset
        
  • herokuアプリのリスタート
    heroku restart APP名
    
  • メンテモード
    heroku maintenance:on
    heroku maintenance:off
    
    • メンテ画面をカスタマイズするなら、どっか他のサーバにメンテ画面のHTMLを配置して、以下のコマンドでOK!
      heroku config:add MAINTENANCE_PAGE_URL=http://どっか他のサーバ/メンテ画面.html
      
  • herokuにgit push ができなくなったら、Gemfile.lockの以下の行を削除してみよう!
    PLATFORMS
      x86-mingw32
    
    • 結局、だめだったから、アプリをDestroyした…。
  • herokuのDB設定
    • まずは設定を確認
      heroku console
      >> ENV['DATABASE_URL']
      => "postgres://username:password@hostname/database"
      
    • このusernameとかを config/database.yml のproductionに書く
      • って、書いてあるけど、ほんとか?
      • どうにも、これを変更しちゃうと、その後のgit pushで失敗するなー。
      • しかも、git push後の一連のデプロイ中に、どうもdatabase.ymlを環境変数で上書きしてるっぽいなー
    • 2012/04/27時点での結論!
      • 結局、database.ymlは初期状態から変更するとまずそうだなー。
      • なので、特にdatabase.ymlは修正せずに、最初のgit push後に「heroku config」で環境設定を確認して、どっかもメモするだけで良さそう
  • herokuのDBをpull&push
    • ここの手順でOKでした!
    • まずは、tapsを入れる
      gem install taps
      
    • で、以降は以下のコマンドでpull/pushが可能に!
      heroku db:pull sqlite://dump.sqlite3 --app アプリ名
      heroku db:push sqlite://db/data.sqlite3 --app アプリ名
      
    • この例だと、APP/dump.sqlite3 にHerokuのDBの内容をpullしてきて、APP/db/data.sqlite3 の内容をHerokuのDBにpushするねー
  • メール送信で、Mailgunを使ってみるぜ!
    • Mailgunは、日に300通まで無料のメール用アドオンですな。以下の使い方ね!
    • まずは、以下のコマンドでアドオンを追加
      heroku addons:add mailgun:starter
      
    • で、コンフィグ(config/environments/production.rb)に以下を追加
       # Mailgun用設定
       config.action_mailer.delivery_method = :smtp
       config.action_mailer.smtp_settings = {
         :port               => ENV['MAILGUN_SMTP_PORT'],
         :address            => ENV['MAILGUN_SMTP_SERVER'],
         :user_name          => ENV['MAILGUN_SMTP_LOGIN'],
         :password           => ENV['MAILGUN_SMTP_PASSWORD'],
         :domain             => '自分のアプリのドメイン名ね!',
         :authentication     => :plain
       }
      
    • あとは、メール送信のコードをフツウにActionMailerを使って、自分用のメールクラスを書けばOK
  • よーし、定期実行用のアドオンのHeroku Schedulerでも、使ってみるか!
    • んー、要するに任意のタイミングでコマンドを実行してくれるのね。なんで「bundle exec rake タスク名」みたいなコマンドを登録すればOK!
    • 使い方的には、アドオン追加して、スケジューラー用のrakeファイルを作って、Herokuの画面で実行時間を設定って感じかな?
    • なんで、まずはアドオン追加
      heroku addons:add scheduler:standard --app アプリ名
      
    • 次は、[lib/tasks/scheduler.rake]に、以下のようなrakeファイルを作成して、git push
      # lib/tasks/scheduler.rake
      
      desc "This task is called by the Heroku scheduler add-on"
      task :create_sample => :environment do
        puts "fakestarbaby"
      end
      
    • で、最後にHerokuの設定画面で、以下のコマンドを任意の時間に設定すればOKかな?
      bundle exec rake create_sample
      
      • あ、設定時刻はUTCなんで、日本で21:00に実行したければ、Herokuには12:00で登録ね!
  • 使用中の容量の確認とか
    heroku info --app アプリ名
    
最終更新:2012年07月09日 06:42