素人がRailsで頑張ってherokuにデプロイできてログを見るのがだいじだなぁとおもった(こなみかん)
前回に引き続きがんばる。
Gemfileを修正してみる
とりあえずGemfileの書き方がなんかだめだったのかな、ということで、
Rails Girls - Japanese
を参考にしながら書きなおす。
[Gemfile]
# Use sqlite3 as the database for Active Record group :test, :development do gem 'sqlite3' end # Use PostgreSQL for heroku (only production) group :production do gem 'pg' gem 'rails_12factor' end
んでherokuにデプロイしなおしてみたら、
... Using pg 0.18.3 ...
とかあるのでpgは有効になってるっぽい。
ってかこれ以前のGemfileの書き方でも出てたから記述がおかしいわけではないな。
前回ワーニングが出てるように見えたのも、ローカル環境ではこの書き方だとbundlerで入らねーよ、というワーニングな気もしてきた。
元に戻す。
# Use sqlite3 as the database for Active Record gem 'sqlite3', groups: %w(test development), require: false # Use PostgreSQL for heroku (only production) gem 'pg', groups: %w(production), require: false gem 'rails_12factor', groups: %w(production), require: false
heroku run rails console は神
色々調べると、アプリケーションエラーが出たらherokuでログを見てみろとのこと。
heroku logでログ見てみたら、
2015-10-09T01:50:35.112317+00:00 heroku[web.1]: Process exited with status 1 2015-10-09T01:50:35.151861+00:00 heroku[web.1]: State changed from starting to crashed 2015-10-09T01:51:56.451809+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=musico.herokuapp.com request_id=155ce1ae-e498-4392-99cf-db03cbf59f8a fwd="xxx.xxx.xxx.xxx" dyno= connect= service= status=503 bytes= 2015-10-09T01:51:56.975357+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=musico.herokuapp.com request_id=860ccdd4-db70-43d6-931f-4320829265e1 fwd="xxx.xxx.xxx.xxx" dyno= connect= service= status=503 bytes= b-kt-01:musico kt$
どうやらH10というエラーコード吐き出してるようす。謎い。
とりあえずコンソール立ち上げてみろと。
$ heroku run rails console Running rails console on musico... up, run.7250 /app/app/models/form/artist.rb:2:in `<top (required)>': uninitialized constant Artist (NameError) from /app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.4/lib/rails/engine.rb:472:in `block (2 levels) in eager_load!' from /app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.4/lib/rails/engine.rb:471:in `each' from /app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.4/lib/rails/engine.rb:471:in `block in eager_load!' ......
ん。
uninitialized constant Artist (NameError)
前に消したと思ってたはずの練習用のファイルがまだモデルの中に残ってた。
消した。
とおったーーーーーーーー!!!
やっとこさデプロイできました。
heroku run rails console は神。
にしても、ゴミファイルがあってもローカルで動くけどherokuに上げたら動かないってことあるのね。
とにもかくにも、やっとこデプロイまでこぎつけました。
素人がRailsとGithubでherokuにデプロイをがんばる
なにやらherokuで簡単にデプロイできるみたい。
しかも今はGithubからも簡単にPushができるとかなんとか。
やってみる。
まずはherokuで色々やってみる
とりあえず昔herokuアカウントを取ったことはあるので、それを利用。
まずはherokuにアプリを作ってみる。
とりあえず念のためプロジェクトがあるフォルダで。
$ heroku create musico Creating musico... done, stack is cedar-14 https://musico.herokuapp.com/ | https://git.heroku.com/musico.git Git remote heroku added
なんかGit remoteって出てるんだけど自動で連携してくれてるのかな。。。
と思ったら、別にコマンドラインでやらなくても、今はherokuのサイトでできるっぽ。
herokuのアプリ一覧ページ
→右上の「+」から「Create new app」押して、適当に名前つけてcreate app(名前は後から変えれる)
→上部ナビバーから「Deploy」を選択、その下に出てくる選択肢から「Github」を選択
→その後は以下ブログ参照kayakuguri.github.io
みたいなみたいな。
sqlite3で早速のエラー
んで、デプロイをポチっておおーなんかもりもりビルドされてるーーーー
! ! Failed to install gems via Bundler. ! ! Detected sqlite3 gem which is not supported on Heroku. ! https://devcenter.heroku.com/articles/sqlite3 ! ! Push rejected, failed to compile Ruby app
テテーン
sqlite3はherokuではつかえまてん。
なので、production環境ではherokuが推奨しているというPostgreSQL(pg) に設定してみる。
参考 →Rails4のアプリをHerokuで動かす - gam0022.net
sqlite3 の部分を pg へ。
んで、Gemfile変えたのでもっかいbundle installしたところ、エラー。qiita.com
これと同じでした。
brewのUpdateエラーで脱線
で、homebrew使う前に一旦アプデかけとこーと思ってbrew updateしたところ、またエラー。github.com
これと同じでした。
one-time bugって書いてあるけど、
$ echo $HOMEBREW_DEVELOPER
をしないとanytimeダメっぽい。
なにが原因かよくわかってないからよくわからないことをしている
んでは改めて。
$ brew install postgresql
完了。
$ bundle install
完了。
もっかいherokuのページでデプロイをぽちる。
エラー。
うむ、pgが有効になったのでGemfile.lockが書き換わってるのにgithubにpushしてませんでした。てへぺろ
コミットしてからもっかいぽちる。
サクセース!!いえあー!!
早速ページを見てみると、、、!
ギャァァァァァ
マイグレーションとの戦い
いろいろ調べてみると、どうやらマイグレートをする必要があるもよう。。
$ heroku run rake db:migrate Running rake db:migrate on musico... up, run.7738 == 20150825070951 CreateReviews: migrating ==================================== -- create_table(:reviews) rake aborted! StandardError: An error has occurred, this and all later migrations canceled: ......
ギャァァァァァ
なにやらテストで作ったモデルとかなにやらが悪さしてるっぽい。
これを機会に全部デリートしたけどまだなんかおかしい。
あ、schema.rbがおかしいままになってるからか。
morizyun.github.io
DBをドロップする前に色々レコード追加したのもったいないのでダンプする。
そしてもっかいGemfileみたら、bundlerに'pg'なんてgemねえよってワーニングでてるっぽい。
この辺色々みてbundlerでpg入れようと思ったけどうまくいかないので、gem installした。ムキー
あとschema.rbも更新方法よくわからんので不要なテーブル記述全部消した。
ついでに気づいたらなんかvendorとvenderってフォルダできてるやんけ。なんだこれ。
あとで調べる。
試行錯誤
以前のマイグレーションファイルが悪さしてるんじゃないか?
消したモデルを指してたりするからな気がする。
railsのrakeで作成したmigrationファイルとstatus履歴を削除する
このへん参考にしながら古いマイグレーションファイルを削除。
なんか色々いじっててよくわからんくなってきたがこれでいけそうな気がスル。
できねぇぇぇぇぇ
あ、heroku側のマイグレート忘れてた。そもそもここからやん。
てか自分で元々マイグレーションでこけたって言ってるのになんでpgがうんたらかんたらやってたのか謎い。
$ heroku run rake db:migrate Running rake db:migrate on musico... up, run.4071 == 20150902054431 CreateAnimeDetails: migrating =============================== -- create_table(:anime_details) -> 4.3382s == 20150902054431 CreateAnimeDetails: migrated (4.3387s) ====================== == 20150902070524 CreateAnimeTitles: migrating ================================ -- create_table(:anime_titles) -> 0.1804s == 20150902070524 CreateAnimeTitles: migrated (0.1809s) =======================
通った。
が、アプリはエラーのまま。。。
ぐぬぬ・・・
戦いはつづく
2台持ちがiPhone6s買うのにMNPか機種変かどっちがいいか悩んだ末、実質20,000円で買ったと自分を納得させる話
私、現在携帯回線を2つ持っているのであります。
端末A: a社、メイン、iPhone5(無印)、10,000円/月
端末B: d社、塩漬け、GALAXYS(もはや化石)、800円/月
という感じで。塩漬け回線は元々解約しようと思ってたのだけれども、タイミングを逃して次のタイミングは来年の11月。とおい。
そして気づいたのね。
もしかして、こういう↓メソッドでおトクchanにiPhone6sが買えるんじゃないか!?と。
①端末Bをa社のiPhone6sへMNP乗り換え
②端末AのSIMをiPhone6sに適用
③端末BのSIMを既存端末に利用
そうすればMNP価格で機種変ぽいことできるんじゃないの?と。
で。ショップ行ってきました。
6sはMNPでもそこまでのキャッシュバックはナッシング
どうやら6sではよくあるMNPの恩恵は受けられないご様子。
ただ、「6無印」であれば、50,000円!のキャッシュバックができるとのことで、かなりお安くなる。
むむむ。。。
むっむむ。。。
ただね。曲がりなりにもプログラミングとかかじってるITの端っこの方の端くれですよ。
ITのIはInternetじゃなくてInformationだってことくらいわかってますよ。
そんな奴が、果たしてちょっと安いからって旧世代の端末を買ってしまっていいものか。
いや、よくない
というわけで6sを買う。
MNPの意味があまりないので、だったら機種変の方がプランとか番号とか諸々そのままだから楽よね、ということで機種変に。
iPhone5 → iPhone6sという二世代を飛び越える大ジャンプして足を挫きそう
とりあえず64GBにしようとしたら、97,080円。
うっひょーーーーたけぇーーーーーー
うっひょーーーー
で、a社のクーポン(LINEとかDMでくるやつ)を使うと10,800円割引。
んで、今は下取りキャンペーンをやってるので、iPhone5を下取りに出す。www.au.kddi.com
→16,200円割引。
→auWALLETプリカも持ってたので、10,000円分シュッとしてチャリーンされるみたい。
というわけで、
本体価格:97,080円
割引:▲27,000円
手数料:3,240円
ーーー
合計支払額:73,320円(WALLET分も加味すると 63,320円)
でござる。
うん、それでも高いわ。
スマバリは実家が入っていれば自分も割引が効くんです
相談中、ショップのお兄さんが、
「ご家族でスマートバリュー入っていたりしないですか?」と。
これ意外と知らない人が多いみたいなのですが。
おうちがauひかりとかJ-COMとかau系の回線使っている人に適用できるスマートバリュー。
実はあれ、自分の家でつないでいなくても、実家がスマバリなら適用されるみたいです。
契約者住所を実家にする必要がありますが、利用や支払いには影響ないので特に問題もないようす。
全然知らなかった。機種変しなけりゃ知らないままになるとこやった。
これから適用なので、実家は結構前からスマバリ入ってますが、自分は25ヶ月以降にならずに1,522円割引スタートになりましたん。ひゃっほい。
▲1,522円/月 x 24ヶ月 = ▲36,528円/2年
になったのはかなーり大きい。
教えてくれたショップのお兄さんありがとう。もう量販なんて行かない!(偏見)
ただ、これって結婚とかしてなくて本籍が実家にある人が使える技なのかもしれない。
そう考えるとしにたい。
塩漬け端末はとりあえず移籍の方がお安い
んで、塩漬け端末の方。
こっちは色々聞いたところ、ガラケーであれば
NMP新規
→ 端末代金 一括0円 + 手数料3,240円
→ 月額費用 2円 / 月※1※2
※1 最初は色々パック入れられるので、後から外すこと前提
※2 36ヶ月間。それ以降は810円
で、d社の契約解除料が10,260円なんだけども、そこは色々とアレなのか、こっちに「商品券」という形でキャッシュバックになりました。10,000円分なのでちょっと足りないんだけど。おこ。
なので、初期にかかる料金としては、
手数料:3,240円
契約解除料:10,260円
キャッシュバック:▲10,000円
ーーー
合計支払額:3,500円
ここで、1年後の満期にd社と解約した場合と、どっちが合計額おトクか見てみましょう。
・d社を続けた場合
800円/月 x 12ヶ月 = 9,600円
・a社にMNPした場合
3,500円 + ( 2円/月 x 24ヶ月 ) = 3,548円
なんと6,052円もおトクchanになりました。
満期じゃなくても、割引切れたら渡り鳥すれば月々の料金はかなり抑えられることを知りました。
ていうかいままで小銭を垂れ流していたことにへこんだ。ちゃんとしよう。
というわけでガラケーに変えて塩漬けることにする。
まとめ
今回ショップいって機種変 + MNPしたことでどう変わったかってと、
端末A
6s費用:63,320円
スマバリ適用でこれから浮くはずのお金:▲36,528円/2年
ーーー
合計:26,792円
端末B
d社のままだと払うはずだった費用:9,600円
a社にMNPした場合の費用:3,548円
ーーー
合計:▲6,052円
→ 端末A・B合わせた費用合計: 20,740円
よし、こう考えると実質20,740円
やすくなった気がするぞ!(白目)
これに限らず、出費の見直しって定期的にしないとアカンですね。
ついでに料金が口座振替になってたので、ポイントのためにクレカに変更する。
ポイント換算すればこれでさらにやすくなったぞ()
iPhoneの容量逼迫が写真やアプリのせいかとおもったら「その他」だった
なんでその他で容量の半分つかってんねん。
どんだけ少数派がおおいねん。
いままでちまちま消してたのが馬鹿でした。
こうなったらとことんやってやる!戦争だ!!
って、結構メジャーなことなのねこれ。
バックアップ→初期化→復元コンボwww.appps.jp
からの色々rikumalog.com
けど結局iPhone6sに変えたので意味なかったですね。
バックアップは意味あったけど。
6s買った話。masterkei.hatenablog.com
千里の道も一歩からっていうけど一歩以外方法ないのかなと思ったけど無かった
テーブルにURLをぶっこむ方法、とりあえずiframeの中でGoogle呼び出せばいいんじゃね?(ハナホジー)とか思ってたけど。実際やってみると全然できない。
むむむ。
プロに聞いてみた。
クロスドメインというらしい。通常だとセキュリティーエラーでできないので、
AjaxやらAPIやらなんやらを駆使しなければならないとのこと。thinkit.co.jp
むずかしいぃぃぃキィィィ
ただ、あくまで表示できないだけなので、RestClientみたいなgemで直接URLの中身を取ってくる、みたいなことはできるようです。
Design Recipe 別館 Blog - Ruby で REST リソースにアクセスするための REST Client
例)
# GET /musics/find_video.json?title=あああ def find_video response = JSON.parse(RestClient.get "http://www.youtube.com/search?q=#{params[:title]}") # => response = { results: [ {title: 'あああ', id: 'hogehoge'} ]} @youtube_id = response['results'].find{|r| r['title'] == 'あああ'}['id'] end
なので、素人はこういう順番でやったらいいんじゃないの?と。
① 小さいウィンドウ(モーダルウィンドウ)出して、検索結果から出力(郵便番号から住所検索するヤツみたいな)
↓
② Ajaxのリモートとかを使いこなして、1画面で収まるように出力
↓
③ select2とかを使って、スマートに動的にやってみる(Examples - Select2)
なーるほどぅ。
まずはモーダルウィンドウから勉強しましょう。です。
うんこを食べないといけないときでも食べ方くらい決めさせて欲しい
という話。
どうせ食べなきゃいけないんだから、せめてその方法くらい考えさせてよっていう。
オブラートに包みまくって書いたらただのスカ野郎のレッテルが貼られそうになる。
TODO:
フォームの例外処理エラーがおかしい
トップからtitle/showへの遷移、2回目以降がなぜかおかしな位置(ページ中段)に遷移するので修正
動画URLもっと楽に入れたい
bootstrapのtableとgridの相性はよく分からないのでとりま放置で
テーブルの表示がイマイチいけてないのをどうにかしたい。
bootstrapのtable x gridsystemを使ってみる
もともとscaffoldで作成してたのでテーブル出力されてる表に、
bootstrapのgridシステムを適用させてみる。
[ .html.erb ]
<div class="table-responsive"> <table class="table table-striped table-bordered table-condensed newline"> <thead> <tr style="font-size: 80%"> <!-- Anime titleは非表示 --> <th class="col-xs-2 col-ms-2 col-md-2 col-lg-2">Profile</th> <th class="col-xs-2 col-ms-2 col-md-2 col-lg-2">Op title</th> <th class="col-xs-1 col-ms-1 col-md-1 col-lg-1">Op artist</th> <th class="col-xs-1 col-ms-1 col-md-1 col-lg-1">Op movie</th> <th class="col-xs-2 col-ms-2 col-md-2 col-lg-2">Ed title</th> <th class="col-xs-1 col-ms-1 col-md-1 col-lg-1">Ed artist</th> <th class="col-xs-1 col-ms-1 col-md-1 col-lg-1">Ed movie</th> <th colspan="2"></th> </tr> </thead> <tbody> <% @anime_details.each do |anime_detail| %> <tr> <!-- anime_detail.anime_title_id は非表示 %--> <td class="col-xs-2 col-ms-2 col-md-2 col-lg-2 fontmini"><%= anime_detail.profile %></td> <td class="col-xs-2 col-ms-2 col-md-2 col-lg-2"><%= anime_detail.op_title %></td> <td class="col-xs-1 col-ms-1 col-md-1 col-lg-1"><%= anime_detail.op_artist %></td> <td class="col-xs-1 col-ms-1 col-md-1 col-lg-1 fontmini"><%= anime_detail.op_movie %></td> <td class="col-xs-2 col-ms-2 col-md-2 col-lg-2"><%= anime_detail.ed_title %></td> <td class="col-xs-1 col-ms-1 col-md-1 col-lg-1"><%= anime_detail.ed_artist %></td> <td class="col-xs-1 col-ms-1 col-md-1 col-lg-1 fontmini"><%= anime_detail.ed_movie %></td> <td class="col-xs-2 col-ms-2 col-md-2 col-lg-2"> <%= link_to '表示', action: :show, anime_title_id: anime_detail.anime_title_id, id: anime_detail.id %> <%= link_to '編集', action: :edit, anime_title_id: anime_detail.anime_title_id, id: anime_detail.id %> <%= link_to '削除', {action: :destroy, anime_title_id: anime_detail.anime_title_id, id: anime_detail.id}, {method: :delete, data: {confirm: '削除してよろしいですか?'}} %> </td> </tr> <% end %> </tbody> </table> </div>
[ .scss ]
//table-responsiveでテーブル内要素が折り返されるようにする .newline { word-break: break-all; word-wrap: break-word; } //anime_detailのテーブル用 .fontmini{ font-size:10px; }
それっぽくはなったんだけれども。col-xs-2、col-ms-2がうまく動かない。
多分列を詰め込みすぎなのが悪い気がする。
まぁそこまでココは使わないので、表示、編集、削除の列を頭に持ってくるくらいの変更。
まぁこんな感じで見れればいいかー。
TODO:
フォームの例外処理エラーがおかしい
トップからtitle/showへの遷移、2回目以降がなぜかおかしな位置(ページ中段)に遷移するので修正
【一応完了】detailページのレイアウト直すのとdetail -> title/showの動線を置く
動画URLもっと楽に入れたい