heroku へクレジットカード登録

heroku でアドオンを使うには、無料であっても本人確認のため
クレジットカードの登録が必要

登録するには Heroku にログインし

Account settings をクリック

heroku

次に Billing タブをクリックし、Add Credit Card をクリック

Screenshot from 2016-08-14 22:31:05

次にダイアログがでるので、カード情報を入力

Screenshot from 2016-08-14 22:32:50

そのままだと入力方法がわからないので

http://www.happyimport.info/how/address.php
を参考に入力方法を調べることに

Address Line 1 には番地と町名
Address Line 2 に建物名と部屋番号
City は 市または区
State/Province は都道府県
ZIP/Postal Code は郵便番号
Country が国
という意味でした

ちなみに部屋番号とかの書き方も調べたかったので
http://eigo-box.jp/others/address/
を参考に書き方を調べることに
部屋番号は#で書くとのことなので
201号室なら
#201
ということに

また、丁目、番地、号については- で書けばOK
5丁目6番7号
なら
5-6-7

都道府県名は省略可能
静岡なら
Shizuoka
というかんじ

これで入力ができたら
Save Details をクリックするとカード情報が登録されます

heroku の環境変数をローカル環境でデブロイするコマンド foreman

heroku の環境変数をローカル環境でデブロイするコマンド foreman

まず、heroku にアップしたアプリのあるディレクトリに移動します

cd heroku/mymemo

環境変数はheroku のアプリについては

heroku config

で見ることができます

ローカル環境にういては
.env というファイルを作成し
ここへローカル環境での値を設定することになります

vim .env

内容は

mykey=mylocalvalue

とします

これで
ENV で mykey を呼び出すと
mylocalvalue を引っ張ってくるようになります

注意点として実行するときに
Procfile を実行することになるので注意
これは
rails server ではなく
Heroku Toolbelt にある
foreman を使うことになります

しかし ubuntu 14.04 の場合
コマンドがみつからないと出たので
foreman をインストールします

gem install foreman

これでインストールできたので

foreman start

を実行します

注意点としては、動作のログにあるように
ポート5000番で動作するので
動作確認するときには

http://localhost:5000/memos
というようになります

これで

vim app/views/memos/index.html.erb 

で編集した

<%= ENV['mykey'] %>

の部分に
mylocalvalue
と表示されるようになります

heroku14

ちなみに、本番環境につかわず
ローカル環境で検証するときに使うものは
.env に書き込み、

foreman start 

で実行するようになるので
本番環境に含めないように gitgnore に設定を書くようにします

 vim .gitignore 

でファイルを開き
最終行に

.env

を追記します

なお、heroku で設定した環境変数については
heroku にログインして
ダッシュボードで確認することもできます

herokuにログインしたら
Personal apps をクリックし
アプリをクリックします

heroku15

次に
Setting をクリックし
Reveal Config Vars をクリックします

これで設定したheroku の環境変数などを
みることができます

heroku16

heroku の環境変数の管理

heroku の環境変数の管理

heroku では環境により異なる値は
ソースに書くのではなく
環境変数で保存するようにする

DBホスト名とかAPIキーなどなど
環境変数をセットするには

cd /heroku/mymemo/

でローカルのアプリに移動して

heroku config:set キー名= 値

を実行

今回なら

heroku config:set mykey=myvalue

とすることで
mey に myvalue という値を設定できます

セットした値は取得することもできるので

heroku config:get mykey

というように
heroku config:get キー名
[/shell]
で取得可能です

ちなみに環境変数一覧の確認は

heroku config

とすると一覧が表示されます

なお、間違えて設定して削除したいというときには

heroku config:unset キー名

とすればOKです

今回なら

heroku config:unset mykey

これで確認のため

heroku config

とすると消えているのが確認できます

再度
heroku config:set で環境変数を追加して
これを View で使うことにします

vim app/views/memos/index.html.erb 

でファイルを開き
セットしたい場所に

<%= ENV['mykey'] %>

とすれば
環境変数の myvalue が表示されます

構文は

<%= ENV['環境変数のキー名'] %>

となります

後々web API などを使うときに使いそうです

次に設定を変えたので
heroku に送るため git で管理します

git add .

で登録

git commit -m "mykey added"

でコミット

git push heroku master

で heroku に送信します

これでブラウザで確認すると
myvalue の値がでているのがわかります

heroku13

ただし、heroku はでるけど
ローカルはでないので、このあたりの設定をする必要があります

heroku でのアプリの更新とリリース

heroku でのアプリの更新とリリース

アプリを更新し heroku に更新してみます

まずは ローカルのディレクトリに移動します

cd heroku/mymemo/

次に view を変更します


 vim app/views/memos/index.html.erb 

でファイルを開き

<p>hello world</p>

を追記して保存

次に動作確認のため

rails s

で変更されているのを確認

heroku10

これで動作確認できたら heroku に反映させます

これは git で管理すればOKです

まず変更を登録します

git add .

次に commit して -m オプションでコメントをつけます

 git commit -m "add hello world"

そして push して heroku に送ります

git push heroku master 

これで ブラウザで heroku 側にアクセスしても
反映されているのがわかります

heroku11

なお heroku に git で送るときに
自動で設定してくれるのでとても楽です

実際には push するたびに heroku側で設定をしてくれていて
ruby の検出や Slug 作成
Dyno への展開が行われています

そして push するたびに
リリースというのが作られていて
リリース一覧は

 heroku releases

とすることで見ることができます

私の環境だと

=== shrouded-chamber-59024 Releases
v10  Deploy 5e71713        snowpoollovely@gmail.com  2016/04/23 07:20:19 +0900 (~ 5m ago)
v9   Attach HEROKU_POSTG…  snowpoollovely@gmail.com  2016/04/17 11:00:35 +0900
v8   Deploy 44eb01d        snowpoollovely@gmail.com  2016/04/17 10:57:12 +0900
v7   Attach HEROKU_POSTG…  snowpoollovely@gmail.com  2016/04/17 10:45:41 +0900
v6   Attach HEROKU_POSTG…  snowpoollovely@gmail.com  2016/04/17 10:19:29 +0900
v5   Deploy 0b51092        snowpoollovely@gmail.com  2016/04/17 10:14:30 +0900
v4   Attach DATABASE res…  snowpoollovely@gmail.com  2016/04/17 10:14:30 +0900
v3   Set LANG, RACK_ENV,…  snowpoollovely@gmail.com  2016/04/17 10:14:29 +0900
v2   Enable Logplex        snowpoollovely@gmail.com  2016/04/16 01:16:07 +0900
v1   Initial release       snowpoollovely@gmail.com  2016/04/16 01:16:07 +0900

となります

見方ですが
最初の v10 とかはバージョン番号

Deploy の後は git のcommit のハッシュ
となります

ちなみに、最大のメリットは
1つ前に戻したりできること

1つ前に戻すなら

heroku releases:rollback

とすると1つ前に戻ります

heroku12

ちなみにバージョン管理のgit を使っているので
v10 などバージョン指定で戻すことも可能です

heroku releases:rollback v10

というようにすれば、指定したバージョンに戻すことができます

One-off Dynos で heroku でコマンド実行

One-off Dynos で heroku でコマンド実行

heroku run コマンドは
今走っているアプリに対してコマンドを使うときに実行するコマンドになる

これは
One-off Dyno を一時的に立ち上げ
それをアプリに対しコマンドを発行というもの

アプリにコマンドラインでアクセスするのなら
cd コマンドで heroku で動かす rails アプリのディレクトリに移動して

heroku run bash

とすればアクセス可能

アクセスすると端末に$が表示され
linux 端末のようにコマンドを使っての操作が可能になる

なお、端末から抜けるには

exit

で抜けることができる

なお rails アプリの場合

heroku run rails console

でrails console でのアクセスによる操作が可能

heroku アプリの操作コマンド

heroku アプリの操作コマンド

heroku にアップしたアプリは
heroku コマンドでいじれます

heroku ps コマンドで
linux の ps コマンドのようにプロセスをみることができます

単純に

heroku ps

とするだけでOK

まず

cd heroku/mymemo

で作成したアプリに移動し

heroku ps

とすると
実行結果に

Free quota left: 17h 26m
=== web (Free): bundle exec rails server -p $PORT (1)
web.1: idle 2016/04/19 09:58:50 +0900 (~ 20h ago)

と表示されます

ちなみに Dyno を2つにすることもコマンドから可能

ただし、Dyno を2つにすると課金対象になりますので
注意

 heroku ps:scale web=2

とすればできるけど
アカウントでクレジット情報がない場合

Scaling dynos... !!!
 ▸    Cannot update to more than 1 Free size dynos per process type.

とでて増設はできないようです

これは自分でサービスを展開するときに使いそうです
AWSも同じで使う用途により増設可能なのがメリット

そして heroku のアプリログをみるには
heroku logs
を使います

linux のログをみるかんじだけど
デフォルトだと1500行までしか保存されないようです

なおリアルタイムでログを監視するのなら

heroku logs --tails

とすればリアルタイムモードになります

この状態でお試しで
https://shrouded-chamber-59024.herokuapp.com/memos/
にアクセスするとログが増えました

今回のログは

2016-04-19T21:59:32.585938+00:00 heroku[router]: at=info method=GET path="/memos/" host=shrouded-chamber-59024.herokuapp.com request_id=2336dcaa-8365-4b15-9890-2da17941cd9b fwd="126.251.50.125" dyno=web.1 connect=3ms service=9ms status=200 bytes=1883
2016-04-19T21:59:32.577420+00:00 app[web.1]: Started GET "/memos/" for 126.251.50.125 at 2016-04-19 21:59:32 +0000
2016-04-19T21:59:32.579325+00:00 app[web.1]: Processing by MemosController#index as HTML
2016-04-19T21:59:32.581406+00:00 app[web.1]:   Memo Load (0.9ms)  SELECT "memos".* FROM "memos"
2016-04-19T21:59:32.582225+00:00 app[web.1]:   Rendered memos/index.html.erb within layouts/application (2.1ms)
2016-04-19T21:59:32.582902+00:00 app[web.1]: Completed 200 OK in 4ms (Views: 2.1ms | ActiveRecord: 0.9ms)

というかんじです

次に管理するときに使うメンテナンスモードについて
これは

herku maintenance:on 

とするとメンテナンスモードになります

この状態でブラウザからアクセスすると
メンテナンス中であることが表示されます

heroku9

メンテ中であるかを調べるには

heroku maintenance

とすることで表示できます

on ならメンテ中です

メンテをオフにするなら

heroku maintenance:off

とすれば解除して稼働状態に戻ります

heroku へのソースコード push

heroku へのソースコード push

git push heroku master

で転送できます

次にDBの設定
これは heroku で行います

DBに関しては
Add-On で対応するので
heroku コマンドを使い、アプリに
PostgreSQL の Add-On をつける

heroku addons:add heroku-postgresql

を実行すると
DB名が
HEROKU_POSTGRESQL_SILVER_URL
となっているのでDBが使えるようになります

次にマイグレーションを実行します
heroku 側のアプリに対してコマンドを実行するには
heroku run を使います

heroku run rake db:migrate

でOK

これでブラウザからアクセスして試したいのですが
アプリのURLを忘れた場合

 heroku apps:info

とすれば調べることができます

今回は

Addons:        heroku-postgresql:hobby-dev
               heroku-postgresql:hobby-dev
Dynos:         web: 1
Git URL:       https://git.heroku.com/shrouded-chamber-59024.git
Owner:         snowpoollovely@gmail.com
Region:        us
Repo Size:     37 KB
Slug Size:     45 MB
Stack:         cedar-14
Web URL:       https://shrouded-chamber-59024.herokuapp.com/

となりました

これでアクセスしたものの

An error occurred in the application and your page could not be served. Please try again in a few moments.

If you are the application owner, check your logs for details.
となりエラーになります

herokuapp

heroku が動いていない可能性を考え

heroku ps:scale web=1 

を実行したもののすでに
now running となっているので別の問題ということに

Procfile を確認してみたら

web: bundle exec rails server - p $PORT

となっていたのが原因

これを修正し、再度

git add .
git commit -m "procfile 修正"
git push heroku master 

で再度転送すると、無事に稼働させることができました

herokuapp2

heroku 稼働のための rails アプリ(練習)その3

heroku 稼働のための rails アプリ(練習)その3

git で commit したものを
heroku に送るための準備をします

方法については
Rails+Herokuで5分でWebアプリ作るおっ( ^ω^)


ドットインストールを参考にさせていただきました
#06 heroku createしてみよう

ソースコードを送るには
ライブラリ依存関係を記したファイルと
Procfile が必要になるのでこれらを作成

Rails の場合、ライブラリの依存関係を示したファイルは
Gemfile としてすでにあるけど
Rails アプリをheroku で動かす場合
特殊な Gem が必要なので
Gemfile を編集します

cd heroku/mymemo/

でプロジェクトに移動し

vim Gemfile

で編集します

使用する gem は
rails_12factor なので
ファイル末尾に

gem 'rails_12factor', group: :production

として保存

group: :production
は本番環境でのみ使うときに指定

次に

bundle install

で反映します

次に Procfile の作成

vim Procfile

で作成して編集します

書き方にルールがあり、
web に関するものは
web というキーワードと決まっているので

web: bundle exec rails server - p $PORT

として保存

-p はポートの指定で
$PORT は環境変数のようなもの
これは Linux の $HOME とかと同じかんじ

キーワードは
web 以外にも
worker にすればバックグランドジョブだったりと
いろいろあるので調べてみるといいかも

ここまでできたら
git にこれらの追加したファイルを反映させます

git add .

ですべてのファイルを対象に追加します
. を指定すればすべて反映になります

次にコミットしたいので

git commit -m "Gemfile update  Procfile add"
と
-m オプションでコメントをつけておきます


次に Heroku へアプリを作成します

heroku create

を実行すると作成されます

実行すると、ログへ

https://shrouded-chamber-59024.herokuapp.com/ | https://git.heroku.com/shrouded-chamber-59024.git

と出ているので
https://shrouded-chamber-59024.herokuapp.com/
でアクセスできるようになってます

あと、heroku create すると
git のリポジトリも作成されるので
これを使えばgit で Heroku にソースコードをプッシュできます

heroku 稼働のための rails アプリ(練習)その2

heroku 稼働のための rails アプリ(練習)その2

前回 Rails アプリの立ち上げまでできたので
Scaffold で設定

実行環境は ubuntu 14.04 64bit

続きからやるので、rails アプリのディレクトリまで移動

cd heroku/mymemo

次に scaffold 機能を使用

rails g scaffold Memo title:string body:text

gは generate の略

次に

rake db:migrate


マイグレーションすることでDB作成されるので

rails s

で動作確認

ブラウザで
http://localhost:3000/memos
へアクセスすると表示されるのを確認

heroku6

なお、IPアドレス:3000/memos
でもいいけどローカル環境なので、とりあえずlocalhost でアクセスしました

データ追加できるか実験もしておきたいので
New memo をクリック

入力画面になるので適当にデータをいれます

heroku7

これでデータが追加され、新しく項目が増えました

heroku8

動作確認はOKなので、これをgit に登録します
とはいってもローカルの git ですが

そして後で Heroku に登録するようにします

ctrl + c で サーバーを一度停止しておきます

まず

git init 

でリポジトリを作成します

次にインデックスに追加するので
git add を実行します
パラメータに . を指定するとすべてのファイルが対象になります


あとはコミットするのですが -m オプションを使い
コメントをつけておきます

git commit -m "initial commit"

“initial commit”
の部分がコメントになります

とりあえず git までできたので
次回は rails アプリを heroku に送る設定をしていこうと思います

heroku 稼働のための rails アプリ(練習) その1

heroku 稼働のための rails アプリ(練習)

まずは ubuntu で rails アプリをつくり
これを heroku に送るようにします

heroku の標準は postgresql なので
アプリを作成するときに
postgresql を使うように設定します

 rails new mymemo -d postgresql 

を実行
しかしエラーがでるため

/versions/2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'

で検索し
bundle install時のエラー
https://teratail.com/questions/23754
を参考に

gem install bundler 

を実行

次に

bundle install

を実行したものの
Rails Could not locate Gemfile
とエラーがでるので、これも検索

Rails Could not locate Gemfileエラーについて

によれば
実行したディレクトリに Gemfile が存在しないため
このため作成した mymemo に移動し実行

cd mymemo

で移動し

vim Gemfile
[・shell]
で設定ファイルを開き
15行目の

# gem 'therubyracer', platforms: :ruby

の先頭の#を削除し有効化

これで

bundle install

を実行したもののエラー

An error occurred while installing pg (0.18.4), and Bundler cannot continue.
Make sure that `gem install pg -v '0.18.4'` succeeds before bundling.

となってしまうため

gem install pg -v '0.18.4'

を実行したもののこれもエラー

これを解決するために gem の postgreSQL をインストールする方法を探すことに

How to install PostgreSQL’s pg gem on Ubuntu?

を参考に

sudo apt-get install libpq-dev

で必要なライブラリをインストールしてから

bundle install

を実行することで無事にインストールできました

これで解決と思ったけど
localhost:3000 でアクセスするとエラー

heroku2

 gem install pg -v '0.18.4'

で追加したけど変わらず

ActiveRecord::NoDatabaseError
で検索することに

Railsでデータベースに接続できなくてエラーがでる

を参考にユーザが存在しないのを確認

sudo su postgres

でユーザを切り替え

createuser -P snowpool

でユーザを追加

これで解決すると思ったら、今度はDBが存在しないというエラーが発生

heroku3

createdb mymemo_development;

でDBを作成
念の為、できているかを

psql -l

で確認

heroku4

これで ctrl + d でユーザを戻し

rails s

を実行し。エラーがないことを確認

heroku5

とりあえずここまでできたので、次は Scaffold 機能の実験