vagrantを利用したCakePHP2系の環境構築その2
もう一山あった環境構築について
vagrantで用意した環境でCakePHPを動かしていたら何かおかしい、CSSが読み込まれない、などがあったので 解決法を記載していきます。
vagrantにダウンロードしたCakePHPを入れる方法は以前書いた記事を参考にしてください。
vagrantを利用したCakePHP2系の環境構築 - 情弱エンジニアのなかのblog
ダウンロードしたものを/home/vagrantの中にフォルダを作ってビルドインサーバを立ち上げて実行する。
その時エラーが出て進まない、そもそもindexが読み込まれてなさそうだという方は参考にしてください。
1.apacheは使えるのか
2.CSSが読み込まれない
3.Security.salt, Security.cipherSeedを変更しなくては
4.データベースの諸々を記載する
5.デバッグキットを入れて完成!
1.apacheは使えるのか
まず最初にvagrantを利用するとapacheがうまく効いてないのではないかと思われます。 これはCakePHPを入れる階層を変えることで解決します。
具体的にはFTPの階層で/home/の一つ上の階層に行きそこから/var/www/html/の中にダウンロードしたCakePHPを入れます。
ブラウザで読み込むと色々とエラーは出るかもしれませんがとりあえずはapacheが繋がっていることが分かると思います。
2.CSSが読み込まれない
さてまずはCSSが読み込まれないことに関してですが、CUIで
vim /etc/httpd/conf/httpd.conf
でファイルを開き
<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
となっているところがあるのですが以下のように編集してください。 途中にコメントなどがあると思うのですが気になさらずに変えちゃってください。
<Directory "/var/www/html"> Options FollowSymLinks AllowOverride All </Directory>
また読み込み専用となっているためふつうに:wq を押してもなんやかんや文句を言われ 書き込みが出来ないと思うので
:w !sudo tee % :q!
で無理やりにでも書き込んでください。
3.Security.salt, Security.cipherSeedを変更しなくては
続いては
Notice (1024): Please change the value of 'Security.salt' in APP/Config/core.php to a salt value specific to your application. [CORE/Cake/Utility/Debugger.php, line 839] Notice (1024): Please change the value of 'Security.cipherSeed' in APP/Config/core.php to a numeric (digits only) seed value specific to your application. [CORE/Cake/Utility/Debugger.php, line 843] Your version of PHP is 5.2.8 or higher.
Security.salt , Security.cipherSeedの値を変えれば解決するので
app/Config/core.php の初期値を変更してください。
/** * A random string used in security hashing methods. */ Configure::write('Security.salt', 'ランダムな文字列'); /** * A random numeric string (digits only) used to encrypt/decrypt strings. */ Configure::write('Security.cipherSeed', 'ランダムな数値列');
こうすれば解決です。
4.データベースの諸々を記載する
Your database configuration file is NOT present. Rename APP/Config/database.php.default to APP/Config/database.php
データベースの設定を色々と反映させる必要があるようですね
/app/Config/database.php.default をコピーして database.phpというファイルを作り中身を編集していきます。
69行目あたりの部分でデータベースの諸々の設定をしているところがあります。
public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'ユーザー名', 'password' => '設定したパスワード', 'database' => 'データベース名', 'prefix' => '', //'encoding' => 'utf8', );
これで編集するのは残すところあと一つです。
5.デバッグキットを入れて完成!
最後は
DebugKit is not installed. It will help you inspect and debug different aspects of your application. You can install it from github
デバッグキットを入れて下さと言われているので、CUIでapp/Pluginに移動してからCakePHP2のGitHubからデバッグキットをクローンする。
$ git clone https://github.com/cakephp/debug_kit -b 2.2 $ mv debug_kit DebugKit
これでデバッグキットが手に入るかと思うのですが何だかエラーでうまくデバッグキットを入れられないという場合は
GitHubのサイトからzipファイルでダウンロードしてapp/Pluginの中に解凍したフォルダを入れれば大丈夫です、ただしフォルダ名を「DebugKit」にすることをお忘れなく。
続いてapp/Config/bootstrap.phpのなかで
CakePlugin::load('DebugKit');
という一文を検索してコメントアウトを外してください。
最後にapp/Controller/AppController.php の中ので
class AppController extends Controller { public $components = array('DebugKit.Toolbar'); //追加 }
こう書けばオーケー!
エラーはすべて解決されるはずです。 以上になります。
CakePHPの命名規則について
MVCの命名規則を理解する
CakePHPでどうにもこうにも進まないエラーが出ましてコードに間違いがないか探したのですが 原因は命名規則を違反しているというものでした。
1.命名規則の整理
2.モデル、ビュー、コントローラごとの命名規則
3.まとめ
1.命名規則の整理
CakePHPではファイル名などを命名するときにいくつかルールがあります、 正しく命名しないと処理が動かないことがあるのでしっかり見ていきましょう。
2.モデル、ビュー、コントローラごとの命名規則
三つの命名規則を記載します。
モデル
データベースのテーブルは複数形で命名する
- モデル・クラスは複数形のキャメル記法で命名する
スクリプトファイル名はモデル・クラス名をそのまま(単数形のキャメル記法で)命名する
コントローラ
- コントローラクラス名はコントローラ名(通常はモデル名と同じ)の複数形+Controllerという形のキャメル記法で命名する
- スクリプトファイルは、コントローラクラス名をそのまま(複数形+Controllerをキャメル記法で)命名する)
アクションメソッド名は、一般的なメソッド名と同様、小文字で始まるキャメル記法で命名する
ビュー
ビューを保管するフォルダ名は、コントローラ名そのまま(複数形をキャメル記法で)命名する
- 各ビューテンプレートファイル名は、アクションメソッド名をアンダースコア記法にしたもので命名する
3.まとめ
- モデル名だけは単数形、それ以外でデータベースのデータを扱う名前は複数形にする
- クラスとして定義されるものはキャメル記法、クラスとは直接関係ないものはアンダースコア記法にする
モデルは単数形ですが、それ以外のものは、多数のデータを扱うわけですから複数形で命名するのが基本です。
テーブル名やモデルを利用するコントローラ名は複数形になっていまして、モデルやコントローラなどクラスとして定義されるものはキャメル記法ですが、テーブルやビューテンプレートのようにクラスでないものはアンダースコア記法になります。
長々と書きましたがやはり理解して使っていくことが大切だと思います。 以上になります。
vagrant up でYour VM has become "inaccessible." Unfortunately, this is a critical errorと出た場合
一旦落ち着くことが大切ね
vagrantを使っていて、いつも通りvagrant upをしたら
vagrant : Your VM has become "inaccessible." Unfortunately, this is a critical error 発生場所 行:1 文字:1 + vagrant up + ~~~~~~~~~~ + CategoryInfo : NotSpecified: (Your VM has bec... critical error :String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError with VirtualBox that Vagrant can not cleanly recover from. Please open VirtualB ox and clear out your inaccessible virtual machines or find a way to fix them.
と出て何もできなくなってしまいました。 とりあえず「vagrant status」をおすと
Current machine states: default inaccessible (virtualbox) The VM is inaccessible! This is a rare case which means that VirtualBox can't find your VM configuration. This usually happens when upgrading VirtualBox, moving to a new computer, etc. Please consult VirtualBox for how to handle this issue. PS C:\Users\nonak\MyVagrant\MyCentOS> vagrant suspend
と出てくるどうやらVirtualBoxの問題らしい、、、 いろいろ調べたら解決法が見つかりました。
VirtualBoxのVMが格納されてるディレクトリのファイルの拡張子を変更します。 VMとは[Virtual Machine]という意味です。
Windowsの場合 C:Users/ユーザー名/VirtualBox/VM名
この中に入っているVM名.vbox-tmpの拡張子をVM名.vboxに変えればOK
あとはvagrant upをすればいつも通りに戻るはずです。
以下サイトを参考にさせて頂きました。 どうやらPCをシャットダウンする前にしっかりとvagrantを終了していないことが原因のようですね、以後気をつけます!
いやー、、焦った~
vagrantを利用したCakePHP2系の環境構築
一筋縄ではいかない仮想環境でのセッティング
CakePHPの学習を始めて環境構築で何かと苦労したので手順等を載せたいと思います。 今回苦労したのが仮想環境でCakePHPを利用するという点でした。
ドットインストールを参考に進めると捗ると思います。
http://dotinstall.com/lessons/basic_cakephp
.1 CakePHP2系のインストール
.2 FTPサーバーへデータを転送
.1 CakePHP2系のインストール
2017/5/14現在でCakePHPの最新は3系になっているので、2系をダウンロードするにはGitHubを使う必要があります。
GitHub - cakephp/cakephp at 2.x
このページで「Clone of download」 「Download ZIP」 でzipファイルをダウンロードしてください。
上手くダウンロード出来たら解凍してください。
.2 FTPサーバーへデータを転送
FTPはCyberduckを使って説明します。 ファイルを転送する前に、編集から環境設定をおして
「ブラウザ」から'.‘で始まるファイルを表示のチェックを入れます。
それが出来たら先程インストールしたファイルを転送します。
とりあえずはここまでで、また何かあれば記事を上げていきます。
MySQL HAVING句とORDER BY句についてまとめてみました!
条件指定と並び替え
HAVING句とORDER BY句の使い方等の説明を書いていきます。
HAVING句
まずSQL文にはGROUP BY句というものがあります、簡単に説明しますとGROUP BY句とはあるフィールドを選択してそのフィールドごとに出力するという意味があります。
GROUP BY句を使ったときに当然、条件検索(WHELE句)も使えるのですがWHELE句はレコードに対する条件指定しかできません。 集約関数を使った検索などを行いたいときにHAVING句を使います。
レコードに対する条件指定が WHELE句
グループに対する条件指定が HAVING句
と覚えるといいかと思います。
HAVING句の使い方の説明としまして以下のようなテーブルがあるとします。
mysql> SELECT * FROM items; +----+-----------+---------+-------+ | id | category | name | price | +----+-----------+---------+-------+ | 1 | food | salad | 200 | | 2 | food | meat | 1400 | | 3 | book | novel | 600 | | 4 | book | comic | 420 | | 5 | clothes | coat | 20000 | | 6 | clothes | jacket | 7000 | | 7 | clothes | bottoms | 6000 | +----+-----------+---------+-------+
まず商品のカテゴリーごとの合計金額を求めたいときはGROUP BYを使います。
mysql> SELECT category,sum(price) FROM items GROUP BY category; +-----------+-------+ | category | price | +-----------+-------+ | food | 1600 | | book | 1020 | | clothes | 33000 | +-----------+-------+
続いて合計金額が1500円以上のカテゴリーを求めたいときはHAVING句を使います。
mysql> SELECT category,sum(price) FROM items GROUP BY category HAVING sum(price) >= 1500; +-----------+-------+ | category | price | +-----------+-------+ | food | 1600 | | clothes | 33000 | +-----------+-------+
お分かりの通りbookのレコードが消えます。
このようにグループに対しての条件指定をしたいときに使うのがHAVING句になります。
ORDER BY句
こちらは使い方としてはシンプルで表示の並び替えをするものになります。 WHERE句、GROUP BY句、HAVING句とは違い検索には関わらないので、まずは自分が視覚的に見やすくするものと思ってください。 先ほどのテーブルを使って説明していきます。
商品の金額の降順に並び替えてテーブルを見たいと思ったときは以下のようにします。
mysql> SELECT * FROM items ORDER BY price desc; +----+-----------+---------+-------+ | id | category | name | price | +----+-----------+---------+-------+ | 5 | clothes | coat | 20000 | | 6 | clothes | jacket | 7000 | | 7 | clothes | bottoms | 6000 | | 2 | food | meat | 1400 | | 3 | book | novel | 600 | | 4 | book | comic | 420 | | 1 | food | salad | 200 | +----+-----------+---------+-------+
重要なのは 「desc」とつけると降順 「asc」とつける、もしくは何もつけないと昇順で表示されます
GROUP BY句などと組み合わせて使うこともできます。
mysql> SELECT category,sum(price) FROM items GROUP BY category ORDER BY price desc; +-----------+-------+ | category | price | +-----------+-------+ | clothes | 33000 | | food | 1600 | | book | 1020 | +-----------+-------+
このように「category」ごとの合計金額(price)の降順で表示されます。
今回の記事を書くにあたり「ゼロから始めるデータベース操作 SQL」という本を参考にさせて頂きました。 www.shoeisha.co.jp
以上になります。
vagrantで管理しているアプリをgitやGItHubに連携させるには
GitHubでファイルを確認するには長い道のりがある
お疲れ様です、制作しているアプリをそろそろGitで管理したいと思ってる方は必見です!
さて今回はアプリをGitHubで管理したのでつまずいた点など記載していきます。 基本的な導入方法に関してはさらっと説明していきます。 今私がvagrantを使っているのでvagrantありきで説明しますので、同じようにvagrantを勉強中の方は是非参考にしてください。
1.GitHubの準備
2.Gitの導入
3.GitHubの連携
4.403と出たら
5.非表示にしたいファイルがあるときは
1.GitHubの準備
まずGitHubの自分のアカウントに入ります。 new repositoryで新しいリポジトリを制作します。 リポジトリの名前を入力して「Create repository」を押せば完了です。 ここで大切なのがリモートリポジトリのアドレスが表示されるのでHTTPSを選択してURLをどこかにコピペしておくと後で都合がいいです。
2.Gitの導入
vagrantを立ち上げてアプリを制作しているディレクトリまで移動します。
$ git init
でGitを導入します。
$ git add . $ git commit -m "ここにコミットに関するコメントを書く"
これでファイルをコミット出来たので続いては GitHubをリモートリポジトリに設定していきます。
3.GitHubの連携
それではリモートリポジトリの設定なのですが、先ほどコピペしておいたURLを使います
$ git remote add origin https://github.com//hogehoge.git
これで
$ git push -u origin master
とすればOKのはずですが
4.403と出たら
もしそこで
error: The requested URL returned error: 403 Forbidden while accessing https://github.com/hogehoge/rss.git/info/refs fatal: HTTP request failed
このようなエラーが出てしまったときは
$ git remote set-url origin https://ここにユーザーネーム@github.com/ritukiii/rss.git
リモートリポジトリのURLにユーザーネームを入れれば解決します。
もう一度pushすればこんどはGitHubのパスワードを聞かれるので入力すれば GitHubのマイページで確認できます。
5.非表示にしたいファイルがあるときは
ついでにGitHubに乗っけたくないファイルをアップしてしまった時の対応ですが 普通gitignoreを使うと思うのですがもしgitignoreでファイルを非表示にしてるはずなのにGitHubで表示されてしまうということがあったら gitignoreをコミットする前にファイルをアップしていないか確認してみてください。 もしそうでしたら、
$ git rm ファイル名
をして頂くとGitHubからファイルを消すことができます。
今回は参考にさせて頂いたサイトは以下になります。
今さら聞けない!GitHubの使い方【超初心者向け】 | TechAcademyマガジン
gitでpushしようとしたら403された話 - Qiita
.gitignoreを変更したのに反映されない場合の対処法 - Labo Memo
以上になります。
DBの設計に関して
リレーショナルデータベースについて
制作しているアプリにDBを実装していきたいのですが、その前にDBの要件定義をしないといけないので、 そのやり方を書いていきます。
1.リレーショナルデータベースとは
2.外部キーとは
1.リレーショナルデータベースとは
まずDBを実装するなら、リレーショナルデータベースについて理解しなくてはいけません。 リレーショナルデータベース(関係データベース)とは 例えば商品を売っている企業が顧客データ、商品データ売上データなどをDBで管理する際、複数のテーブルに分けることでより分析しやすくすることです。
つまりDBを実装する時は項目ごとにテーブルを分けることが重要になります。
2.外部キーとは
そしてもう一つ大切なのが外部キーです。 外部キーとはテーブルAとテーブルBを連結するときの検索条件などに使うものでこれがないとテーブルを複数作っても意味がありません。
以上になります。