ドグサレ初心者のへっぽこビッグウェーブ

地球の底辺にいるゴミがプログラミングとか音楽とかを語るクソブログ

素人がRailsで頑張ってherokuにデプロイできてログを見るのがだいじだなぁとおもった(こなみかん)

masterkei.hatenablog.com

前回に引き続きがんばる。

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というエラーコード吐き出してるようす。謎い。

stackoverflow.com

とりあえずコンソール立ち上げてみろと。

$ 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してませんでした。てへぺろ

コミットしてからもっかいぽちる。

f:id:masterkei:20151008180211p:plain

サクセース!!いえあー!!

早速ページを見てみると、、、!

f:id:masterkei:20151008181815p:plain

ギャァァァァァ

マイグレーションとの戦い

いろいろ調べてみると、どうやらマイグレートをする必要があるもよう。。

$ 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ねえよってワーニングでてるっぽい。

qiita.com
qiita.com

この辺色々みて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を使ってみる

qiita.com


もともと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がうまく動かない。
多分列を詰め込みすぎなのが悪い気がする。


まぁそこまでココは使わないので、表示、編集、削除の列を頭に持ってくるくらいの変更。

http://g.s9t.jp/data/ff76e722eabe3ec4c39eba07aa20e8f0.png


まぁこんな感じで見れればいいかー。





TODO:
フォームの例外処理エラーがおかしい
トップからtitle/showへの遷移、2回目以降がなぜかおかしな位置(ページ中段)に遷移するので修正
【一応完了】detailページのレイアウト直すのとdetail -> title/showの動線を置く
動画URLもっと楽に入れたい