2018年1月22日月曜日

2018/01/21(日) CakePHPの勉強

午後から。


●CakePHP の学習
★環境準備
たまたま手元にある書籍で扱っているのは CakePHP 1.x だが最新は 3.x である
・研究室内のサーバ dusk (CentOS 7)のPHP 5.4に合わせて Cake 2.x を選択
CakePHP 2.10 をダウンロードして自分のホームディレクトリ下に導入
  - 書籍を参照して .htaccess を記述
  - chmod -R a+w app/tmp

★DB等の設定
・MariaDB にデータベースとテーブルを作成
  - DB名は研究室内の運用ルール(後述)に沿って k99jk987.cake.db にした
  - テーブルは書籍に従い customers と order_records
  - 書籍のCREATE TABLE文を実行。ただし TYPE=MyISAM を Engine=Aria に変更
・CakePHP を調整
  - app/Config/database.php を編集
  - app/Config/core.php の salt と seeds を適当に変更
cake bake を実行
  - シェルから ./lib/Cake/Console/cake bake を実行
  - 文句を言われるので app/webroot/index.php と test.php に define('CAKE_CORE_INCLUDE_PATH', '/なんとかかんとか'); を入れた

★エラーへの対処
・DB名について検討
  - Mysql.php でエラーが出る。DB名にドット(.)が入っているのがまずいらしい
  - 思えば baserCMS のときにもそこで引っかかった
  - クラス DboSource の関数 name を使って k99jk987.cake.db を `k99jk987`.`cake`.`db` にしてからDBにアクセスしようとするのが問題
  - CakePHP を修正するよりDB名を k99jk987_cake_db に変えるほうが楽
・cake bake を再実行
  - Model を作ったりできることを確認した

●計算機環境の整備
★仮想サーバ dusk における MariaDB 運用ルールについて検討
当研究室内の仮想サーバで MariaDB を使うときにはDB名を `ユーザID.キーワード.db` という形式にするよう運用ルールを定めている。サーバにユーザアカウントを作るときには次のようなGRANT文を実行する(ユーザIDがk99jk987のときの例)。途中のパーセント記号(%)は複数文字にマッチするワイルドカードと見なされる。
grant all on `k99jk987.%.db`.* to `k99jk987`@localhost identified by 'パスワード';
しかし、通常このような名前の中では区切り記号としてドットよりもアンダスコア(_)を使うことが多い。当研究室の運用ルールでそうしなかったのは、GRANT文を
grant all on `k99jk987_%_db`.* to `k99jk987`@localhost
のように実行するとDB名の中のアンダスコアが1文字にマッチするワイルドカードとみなされるので、これを避けるためであった。

これはGRANT文を次のように円記号(¥)ないしバックスラッシュ(\)でエスケープするよう変更すると回避することができる。
grant all on `k99jk987\_%\_db`.* to `k99jk987`@localhost
うっかりエスケープするのを忘れそうであるが、それさえ防ぐことができるなら問題無い。(あるいは、そもそもアンダスコアがワイルドカードとみなされても大した問題ではないと割り切ることもできる。)結局、GRANT文を実行するのは当研究室内で自分だけであり、自分以外の誰かがミスすることを心配する必要は無いのでアンダスコアを許容するように運用ルールを変更することにする。

結論として運用ルールを変更する。今後はDB名の中の区切り記号としてドットとアンダスコアの両方を許容し、GRANT文としては次の二つを実行する。
grant all on `ユーザID.%.db`.* to `ユーザID`@localhost identified by 'パスワード';
grant all on `ユーザID\_%\_db`.* to `ユーザID`@localhost;

●基礎演習2(2年次向け) 授業処理
・PDFファイルのハードコピーに押印し、明日提出できるようにした

●その他
・PB演習の写真から記事に使えそうなものを抽出

0 件のコメント:

コメントを投稿