情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

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.まとめ

MVC命名規則の基本となる考え方は以下になります。

  • モデル名だけは単数形、それ以外でデータベースのデータを扱う名前は複数形にする
  • クラスとして定義されるものはキャメル記法、クラスとは直接関係ないものはアンダースコア記法にする

モデルは単数形ですが、それ以外のものは、多数のデータを扱うわけですから複数形で命名するのが基本です。

テーブル名やモデルを利用するコントローラ名は複数形になっていまして、モデルやコントローラなどクラスとして定義されるものはキャメル記法ですが、テーブルやビューテンプレートのようにクラスでないものはアンダースコア記法になります。

長々と書きましたがやはり理解して使っていくことが大切だと思います。 以上になります。

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の問題らしい、、、 いろいろ調べたら解決法が見つかりました。

VirtualBoxVMが格納されてるディレクトリのファイルの拡張子を変更します。 VMとは[Virtual Machine]という意味です。

Windowsの場合 C:Users/ユーザー名/VirtualBox/VM

この中に入っているVM名.vbox-tmpの拡張子をVM名.vboxに変えればOK

あとはvagrant upをすればいつも通りに戻るはずです。

以下サイトを参考にさせて頂きました。 どうやらPCをシャットダウンする前にしっかりとvagrantを終了していないことが原因のようですね、以後気をつけます!

姫路のホームページ製作屋WILDWEST-SERVICE

いやー、、焦った~

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ファイルをダウンロードしてください。

f:id:nonaka-katuma-hal:20170514143220j:plain

上手くダウンロード出来たら解凍してください。

.2 FTPサーバーへデータを転送

FTPCyberduckを使って説明します。 ファイルを転送する前に、編集から環境設定をおして

f:id:nonaka-katuma-hal:20170514143319j:plain

「ブラウザ」から'.‘で始まるファイルを表示のチェックを入れます。

f:id:nonaka-katuma-hal:20170514143639j:plain

それが出来たら先程インストールしたファイルを転送します。

とりあえずはここまでで、また何かあれば記事を上げていきます。

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で新しいリポジトリを制作します。 f:id:nonaka-katuma-hal:20170509181310j:plain リポジトリの名前を入力して「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を連結するときの検索条件などに使うものでこれがないとテーブルを複数作っても意味がありません。

以上になります。