2016/04/05

みなやってるっぽいんで herokuでrails4 やっておこう

実はまだHerokuを使ったことがなかったなぁと思って唐突だけどやってみるかと。
そしていつものようにHeroku専用のlxcインスタンスを作るところから。

lxcインスタンス準備
$ sudo lxc-clone -n heroku master (予め作成済みのubuntu15.04のマスターインスタンス)
$ sudo lxc-start -n heroku
$ ssh heroku
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install wget git curl

アカウント作成
Heroku Sign up でサインアップして、飛んできたメールでアクティベーション。

Heroku Toolbelt インストール
https://toolbelt.heroku.com/debian の通りに

$ wget -O- https://toolbelt.heroku.com/install-ubuntu.sh | sh
で入れる。
残念なのが、これを実行するとruby2.2がシステム環境にインストールされてしまう。
使わないのに・・・

Herokuログイン
$ heroku login

アプリ作成
$ heroku apps:create my-app
my-appがHerokuでユニークじゃないとエラーになる。

コンソール起動
$ heroku run bash --app my-app
おぉ。すごい遅いけど、my-appインスタンスへちゃんと入れた。

my-appインスタンスの中をちょっと見てみる
$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]
/usr/bin/rubyは1.9.3なのか。

$ java -version
java version "1.7.0_95"
OpenJDK Runtime Environment (IcedTea 2.6.4) (7u95-2.6.4-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)

$ python -V
Python 2.7.6

$ uname -a
Linux (ノード名) 3.13.0-79-generic #123-Ubuntu SMP Fri Feb 19 14:27:58 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Ubuntuなのね。そうでしょうとも。

$ free
             total       used       free     shared    buffers     cached
Mem:      62916388   59003396    3912992     123832    1872016    9203196
-/+ buffers/cache:   47928184   14988204
Swap:     63963132    2880184   61082948
ほうほう。

$ whoami
u52987
アプリ名とかじゃないのか。

ホスト名=インスタンスノード名だった。emacs入ってなかった。
当然sudoないし、pingないし、
あまり面白くなかったので退散!


rvm ruby rails4環境

$ curl -sSL https://rvm.io/mpapis.asc | gpg --import -
$ curl -sSL https://get.rvm.io | bash -s stable
$ source .rvm/scripts/rvm
$ rvm install 2.2.4 --default
$ gem install rails --no-ri --no-rdoc

Herokuはpostgresql(Sqliteは使えない)なのと、rails4のpg gemはNativeビルドなので
$ sudo apt-get install postgresql-server-dev-9.4
で入れておく

後は Getting Started with Rails 4.x on Heroku に書いてあるとおりに

$ rails new myapp --database=postgresql
成功したら
$ cd myqpp
Gemfileの'therubyracer'のコメント外して
$ bundle
$ rails g controller welcome

conf/routes.rb のroot設定を有効に
app/views/welcome/index.html.erb ファイル作成

Heroku gems
gem 'rails_12factor', group: :production
ruby "2.2.4"
をGemfileの一番下に加える

ローカルで動作確認
$ rails s -b 0.0.0.0

gitリポジトリ作成
$ git init
$ git add .
$ git commit -m "the myapp first commit"

Herokuアプリ作成

$ heroku create (名前はお任せで)
この時点でgitリモートにherokuがいる

deploy
$ git push heroku master

ほぉ。git pushでデプロイってことになるのかぁ。

指定されたURLへアクセス・・エラーだ・・ ログ確認
$ heroku logs
index.html.erbが適当すぎた。

ついでに、ここでもWANアドレスを表示するアプリにしてみる

app/controllers/application_controller.rb に以下のbefore_actionコールバックを追加
  before_action do
    $request = request
  end

app/views/welcome/index.html.erbで以下のように表示
<%= $request.remote_ip %>

更新
$ git commit -a -m "request.remote_idを表示"
$ git push heroku master

URL確認。後はこれの繰り返しですかね。

puma使うようにしてみる
チュートリアルでデフォルトはwebrickが動いてるがproductionではpumaがオススメだと。
Procfileを作成して
web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}
って書くと。

ローカルテストするんだったら.envファイルを作ってPORTとRACK_ENVを定義しておくとか
チューニングとかはconfig/puma.rb作って、なんとかかんとか。
この辺は、ちょっとパスしましたが、ドキュメントは親切丁寧ですね。

railsコンソール
$ heroku run rails console
rake実行
$ heroku run rake db:migrate

bundle execの代わりにheroku runって感じですか。

$ heroku run bash で再びコンソールへ

$ ruby -v
ほお。Gemfileで指定した2.2.4だ。どこ?
$ which ruby
/app/bin/ruby -> ../vendor/ruby-2.2.4/bin/ruby
アプリのローカル環境に入ってるんですね。

デプロイしたアプリが入ってます。ここが起動パスなのは間違いないと思うけど
ログファイルは空っぽ。どこか別のところで管理されているのだろうね。


$ cd myapp したら以下のメッセージが現れた!cdする度に表示される
RVM used your Gemfile for selecting Ruby, it is all fine - Heroku does that too,
you can ignore these warnings with 'rvm rvmrc warning ignore /home/ubuntu/heroku/myapp/Gemfile'.
To ignore the warning for all files run 'rvm rvmrc warning ignore allGemfiles'.
「RVM使ってるんだね。Herokuもだよ。このメッセージ消したければこうしなさい」ッて感じ?
やりますとも。
$ rvm rvmrc warning ignore allGemfiles
はい。消えました。

SSH Gitでデプロイするためには

Deploying with Git に詳しく書いてあるわけですが、ざっくりやってみると

SSH Key作って登録
$ ssh-keygen
$ heroku keys:add
keygenしたファイルをuploadするか?って聞いてくる。入れる。
$ heroku keys (アップされたか?)

接続チェック
$ ssh -v git@heroku.com
debug1: Offering RSA public key: /home/ubuntu/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
OKなようだ。

$ heroku create --ssh-git
'-ssh-git'を付けると、git remoteが、https://じゃなくて、git@heroku.com:になる。
SSHキー登録が住んでいれば、gitアカウントのSSHでデプロイされる。

--ssh-gitを付けるのめんどくさいって時は
$ git config --global url.ssh://git@heroku.com/.insteadOf https://git.heroku.com/
をやっておけば、デフォルトがSSHになるそうな。

既存アプリのgitリモートにherokuを追加するには
$ heroku git:remote -a (アプリ名) --ssh-git
--ssh-git付けなければ、https://になる。これは何度もやり直せる。



何だかんだやらずにrailsアプリ即デプロイしたらどうなるか試してみたら

remote: ###### WARNING:
remote:        Include 'rails_12factor' gem to enable all platform features
remote:        See https://devcenter.heroku.com/articles/rails-integration-gems for more information.
remote:
remote: ###### WARNING:
remote:        You have not declared a Ruby version in your Gemfile.
remote:        To set your Ruby version add this line to your Gemfile:
remote:        ruby '2.2.4'
remote:        # See https://devcenter.heroku.com/articles/ruby-versions for more information.
remote:
remote: ###### WARNING:
remote:        No Procfile detected, using the default web server.
remote:        We recommend explicitly declaring how to boot your server process via a Procfile.
remote:        https://devcenter.heroku.com/articles/ruby-default-web-server
と、ワーニングは増えたけど普通に動きましたね。




最後に

前記事でGoogle Cound PlatformのApp Engineで簡単アプリ作成を書いた。
で、Ruby環境について読んでいたらApp EngineのRuby=Railsのことらしい。
なんだ、AppEngineでRails動くんじゃないか。
無料枠で使用できるなら、今度やってみようと思ったが、残念有料枠でした。
60日間無料お試しで遊ぶ程度しかできないようだ。




個人的感想
試してみて思ったのは、なるほど heroku 簡単でいいです。しかし1つ自分に合わない点がある。

git pushでデプロイまでされてしまうこと

真面目にherokuでサーバーアプリ稼働させたいならいいんだろうけど、ローカルサーバーアプリの開発リポジトリ置き場として使いたいだけって時には使えない。

やっぱり自分にはGoogle Cloud PlatformのApp Engineでプロジェクト作って、そこのプライベトGitを活用するほうがあってるっぽい。git pushとデプロイは別なので。

0 件のコメント:

コメントを投稿