プログラミングは面白い

プログラミングの事を中心に色々書いていきます

LaravelでMysqlを設定する

ちょっとPHPだけだと飽きちゃうのでLaravelにも挑戦中。
メインはrailsにするつもりなのであくまで他のフレームワークの視察程度です。

例の如く、データベースの設定で少し躓きました。
あ、でも少しだったので多少は成長したようです。

以下、軽く注意点を書いておきます。
まず、mysqlのバージョン8から認証方式が変わったようです。
既存の認証方式が何だったのか私にはわからないので、どのように変わったかは謎。
まぁとにかくこの認証方式のせいでデータベースのマイグレーションがうまく行きません。

まずはmysqlのユーザーのチェックをしましょう。
mysqlにログインして下記コマンドを入力して中身を確認。

mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | mysql_native_password |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+

私の場合はrootユーザーがcaching_sha2_passwordになっています。
こいつが悪さをしていますので、これを他のuserと同じくmysql_native_passwordにかえます。
変更方法は下記コマンド。

> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'パスを入力';

これで完了です。
rootとlocalhost、最後のパスは自分の設定に合わせて適宜変更してください。

また、今後新規でユーザーを作った場合にデフォルトでmysql_native_passwordになるようにしておきましょう。

$ mysql --help | grep my.cnf

これでmy.cnfファイルの場所を探して、下記を追記

[mysqld]
default-authentication-plugin = mysql_native_password

これでマイグレーションすればバッチリ成功すると思われます。

windows環境でこの設定するのにめっちゃ苦しんだ覚えがあります。
確かブログの記事にもした気がしますがまぁまた書いておきましょう。

そういえば、railsのデプロイは適当に中身がないアプリで試してみることにします。
これなら何かあってもノーダメージだし、何度でも簡単にやり直せますからね。
PHPが落ち着いたらいざ挑戦。

デプロイ進まず

さて、1週間前にアプリは開発完了し、これからデプロイ作業だ!というところで止まっています。

と言うのも、まずこのrailsのデプロイに関してあまり情報ありません。
capistranoというのを使ってデプロイする手法が流行りっぽいのですが、こいつが何なのかイマイチ謎。

私はある程度全体像を掴んでから作業に移行したい派です。
もちろん、やった事ないので全体像なんか掴みきれないのですが何となくでも流れを把握したいのです。
その作業をやっているかいないかでは、何か問題があった時の対処の時間が格段に減ります(私の場合は)。
また、モチベーションの低下も防ぐことが出来ます。
以前、djangoでも簡単なアプリを作って、それはVM環境内でデプロイをしてみました。
その時も右往左往しましたが、ある程度の流れを把握していたので割りとスムーズにデプロイできました。

もう少し全体像を掴んでからデプロイに着手したいところです。
早く公開したいんですけどね。
あと、ちょっと知り合いの会社でお手伝いって事で開発に参加させてもらえそうで、PHPの勉強をしています。
PHPの記法がなんかシックリこなくてちょっと手こずっていますが、やっぱりHTMLとの相性はバツグンですね。
とりあえずprogateのPHPを3周くらいしてから別の教材でも勉強しようと思っています。
基礎は固めておきたい。

デプロイを調べつつ、PHPを頑張ろう。
為せば成る、為さねば成らぬ何事も、成らぬは人の為さぬなりけり

やったー

ついに完成した!
まだちょっと作りこみ甘い部分あるけど、まぁいいでしょう。
月別アーカイブを自分で作ったのはちょっと誇らしい。
railsの知識というよりは、rubyそのものの記述をちょこちょこ使った。
当たり前だけど、やっぱ実際何か作る場合はコーディングも結構必要なのね。
rubyの勉強もちゃんとやってないとダメだなって改めて思った。
もっとrubyの基礎を勉強しよう。

さーて、あとは地獄のデプロイか…
サーバーにruby入れて、rails入れて、mysql入れて、あと何が必要なんだろ。
あ、webサーバーか。これはNginxでいいかな。
あとはなんだ。
ドメインも取得しないとか。
あとなんだ。
gitも入れておこう。
こんなもんかな。

rails環境を用意
mysqlいれる
・Nginxをいれる
・gitをいれる
ドメイン用意

まぁあとは適宜対応しますか。
さぁ、クソサービス爆誕まであとわずか!
がんばるぞー。

月別アーカイブ的なのでめっちゃつまずいた

ブログによくある、月別アーカイブが欲しくて色々調べてみたのですがこれと言った情報がありません。
どうやって作ってるのか検討もつかなかったのですが、とりあえず表示部分だけ作れました。

私はコントローラー側で一気に処理出来るのかな?と思ったのですが、どうにも無理っぽかったので処理を分けてみました。
1. ○○○○年○月○日(件数)と表示させる処理
2. 上記からリンクを作成して該当月のデータだけを抽出

いま出来たのはとりあえず1だけです。
画面には表示できましたが、2の処理が出来るかな?
まぁ新しくviewを作ってアクションつくれば簡単に出来そうな気はする。
要は条件抽出したものをeachで取り出してviewで表示させればいいだけだと思うし。

これが出来たらあとは削除機能作って終わりだー。
あ、コメント機能ないな。
まぁいらないか。

あと少し。
がんばるぞー。

あと少し…

作り始めるとあっという間ですね。
まぁシンプルなブログシステムなので当たり前なんですけども。

しかしやっぱりHTML・CSSが理解しきれてなくて時間取られる。
ちょっとしたデザインを変えるにもトライ&エラーしまくり。
要素を横並びにするのにinline-blockにしてそれを右寄せしたいのに出来ない!とかね。
親要素を右寄せすると出来るのねこれ。
CSSの優先順位とかあったりしてCSSが効かない!とか…
railsはページ毎にCSSが分かれてるからこれに書いていけば干渉し合わないのかな?と思ったらガッツリ干渉しあってるし。
なんでこれ分かれてるんだよ…
仕方ないのでページ毎にID振って指定したらオーバーライドできた。

なんにせよ、あと少しだ。
編集機能つけたし、あとは削除機能つけたら終わりかな?
地獄のデプロイに耐えられるだろうか…
ここまで来たら公開したい。

railsでカラムの確認をしたい時

今までprogateで勉強していたのですが、progateは大変分かりやすく作ってあり、
データベースの構造を視覚的に表示してくれています。
そのお陰でどんなカラムがあって中身がどうなっているのか一目瞭然です。
しかし、実際の開発時にはそんな便利機能ありません。
テーブルを作成しカラムを作ったものの、後々カラム名なんだっけ?って事が私には割りとあります。

そんな時はコンソールで下記コマンド入力すると一発でカラム名を出してくれます。

テーブル名.column_names

これでカラム名を返してくれます。
備忘録として。
便利ー。

simple_formatを使ったら改行できた!

やったぜ!
また一つ完成に近づいた!

前回の記事に書いた、textareaで書いた文章が改行されない問題解決しました!
railsには予めsimple_formatというヘルパーメソッドが用意されていて、これを出力したいHTMLに埋め込むだけ!
埋め込む場所がちょっと最初分からなかったけど、色々試してみたら出来た!
仕組みはよく分かっていない…w

まず、私の場合は新規投稿するためのページと、ブログなので一覧のページがあります。
このヘルパーメソッドを埋め込む場所が最初はtextarea内に埋め込むのかな?と思ったのですが違いました。

<!-- 一部抜粋 -->
<textarea name="body" placeholder="本文"><%= simple_format(@post.body) %></textarea>

これでいいのかな?
と思ったのですが、このtextareaに挟まれてる@post.bodyは投稿をミスした場合のrender用のデフォルト値です。
一体これとsimple_formatとやらがどう働くんだろう?って事でとりあえず試してみました。
が、当然何も起きません。
しかし、投稿画面のtextarea内に<p></p>というタグがデフォルトで表示されていました。
placeholderがあるのに”本文”という文字列は消えていました。
このPタグの間に文字書けば改行されるのかな?と、試してみたけどPタグも文字列としてそのまま出力されるだけでした。

んで、次に試してみたのが一覧の方のページのタグにこのヘルパーメソッドを埋め込む方法です。
この方法がどうやら正解でした。

<!-- 一部抜粋 -->
<% @posts.each do |post| %>
<h1 class="post-title"><%= post.title %></h1>
<p class="post"><%= simple_format(post.body) %></p>
<span><%= post.created_at %></span>
<% end %>

元々はpost.bodyだけで本文を呼び出していたのですが、このpost.bodyを引数にしてsimple_formatに渡したらちゃんと改行されて表示されました!
めっちゃ簡単!

あとは記事の詳細画面作って削除機能つければとりあえず終わりかな?
あ、あとログイン機能も作っておこうかないと誰でも投稿出来ちゃうな…
まぁあと少し!
デプロイで地獄を見る覚悟もしておかないと!

頑張るぞー。