CakePHP
Vagrant

Vagrantで設定を進める、CakePHP編

More than 3 years have passed since last update.

Vagrantでの開発環境作りを進めております。目標はChefでやることなのですが、いったん手動で、諸々整える時期です。最低限の設定しかしておりません。CakePHPを動かせるようにします。

http://cakephp.jp/

上サイトから、現在の最新、2.5.6安定版をダウンロードして、しかるべきディレクトリに置きます。ディレクトリ名もcakephpと適当に付けておきます。Vagrantfileがあるところに置いておきます。


//hogeディレクトリに用意しています。

.

├── .vagrant
│   └── machines
├── Vagrantfile
└── cakephp
├── .editorconfig
├── .gitattributes
├── .gitignore
├── .htaccess
├── .travis.yml
├── CONTRIBUTING.md
├── README.md
├── app
├── build.properties
├── build.xml
├── composer.json
├── index.php
├── lib
├── plugins
└── vendors

tree -L 2 -a

「treeコマンドって、便利だなぁ。」


エラー出て解消する&はまったこと

設定で、Vagrantfileがあるところをrootにしているので、今のところ

「localhost:4567/cakephp」でアクセスができる状態。

アクセスすると大量のエラー。


localhost

Warning: strtotime():It is not safe to rely on the system's timezone settings.

You are *required* to use the date.timezone setting or the date_default_timezone_set() function.

In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.
We selected 'UTC' for 'UTC/0.0/no DST' instead in /vagrant/cakephp/lib/Cake/Cache/CacheEngine.php on line 60
Warning: _cake_core_ cache was unable to write '
cake_dev_ja' to File cache in /vagrant/cakephp/lib/Cake/Cache/Cache.php on line 323
Warning: /vagrant/cakephp/app/tmp/cache/persistent/ is not writable in /vagrant/cakephp/lib/Cake/Cache/Engine/FileEngine.php on line 385

Fatal error: Uncaught exception 'CacheException' with message 'Cache engine _cake_core_ is not properly configured.' in /vagrant/cakephp/lib/Cake/Cache/Cache.php:181 Stack trace: #0 /vagrant/cakephp/lib/Cake/Cache/Cache.php(151): Cache::_buildEngine('_cake_core_') #1 /vagrant/cakephp/app/Config/core.php(374): Cache::config('_cake_core_', Array) #2 /vagrant/cakephp/lib/Cake/Core/Configure.php(72): include('/vagrant/cakeph...') #3 /vagrant/cakephp/lib/Cake/bootstrap.php(175): Configure::bootstrap(true) #4 /vagrant/cakephp/app/webroot/index.php(94): include('/vagrant/cakeph...') #5 /vagrant/cakephp/index.php(41): require('/vagrant/cakeph...') #6 {main} thrown in /vagrant/cakephp/lib/Cake/Cache/Cache.php on line 181


「読む気、失せりにけり。」


timezoneを指定する

一番上に、Warning: strtotime():It is not safe to rely on the system's timezone settings.とあるので、コレを設定してみる。vagrantの中に入って、以下。


/etc/php.ini

[Date]

date.timezone = Asia/Tokyo

上のようにすれば終わり。


app/tmpの権限を変更する

そもそも、Fatalエラー出てるやん。これ治さないと。

app/tmpの権限を777にしちゃえば良いらしい。

sudo chmod -R 777 app/tmp


エラーは消えたけど、違う警告出る。


localhost

Warning: SplFileInfo::openFile(/vagrant/cakephp/app/tmp/cache/persistent/myapp_cake_core_file_map): failed to open stream: Permission denied in /vagrant/cakephp/lib/Cake/Cache/Engine/FileEngine.php on line 356


「めんどくさくなってきた。。」

こことか、ここ参考。

http://www.iwaking.com/20121210/740/

http://kwski.net/cakephp-2-x/1009/

言われた通りにやる。

app/Config/core.php

app/Config/core.php

'mask' => 0666を追加する。

これでイケルかと思ったら、行けない。おかしい何でだよ!パーミッションも777にさっきしただろ!と思っていたのですが。

よくよくファイルの権限みてみたら、

/app/tmp/cache/persistent

の下の

myapp_cake_core_cake_dev_ja*

myapp_cake_core_file_map*

これらが、755になっていて、777になっていなかった。なんでだ。さっきchmod -Rしたじゃん!

(。。けど、なにかしらの仕様により効かないことがあるらしい。詳細未調査。。)

といことで、上記2ファイルも777にして、無事、警告は消えました。


デザインが反映されない問題。

警告は消えたのですが、どうもCSSが反映されていないようで、とてもCakePHPとは思えない、シンプルなデザインになっちゃってるのです。「localhost:4567/cakephp」にアクセスするとこんな感じ。

スクリーンショット 2014-12-07 23.39.45.png


原因は、URL rewriting らしいので、治す。

vagrant内に入って、以下。


/etc/httpd/conf/httpd.conf


# この行がコメントアウトしてないようにする。
LoadModule rewrite_module modules/mod_rewrite.so

# 以下のようにする。最初は、AllowOverride noneとかになってる。
<Directory "/var/www/html">
Options FollowSymLinks
AllowOverride All
</Directory>

# 補足
# "/var/www/html"部分はhttpd.cnfのDocumentRoot設定を書いておきます。
# 以下のような行があります。

DocumentRoot "/var/www/html"


以上、これでイケル!と思いきや、、、行けない。なんでや!!!!泣きたい。もう打つ手はうった。

「もう寝よう。」

と思ったのですが、もう一度、「httpd.cnf」を見直してみたら。。

<Directory />(中略)</Directory>がもう一箇所あった。。なぞ。よく分からないけど、下のこっちが効いていたようなので、丁寧にこちらも上記通り書いたら、治りました。(いや、どっちかいらないから、消しとけばいいんだよね。)


URLを綺麗にしておきたい。

今は「localhost:4567/cakephp」という形でアクセスしているけど、だ、ださい。

「localhost:4567」だけにしたい。

http://book.cakephp.org/2.0/ja/deployment.html

ルートは「app/webroot」にすべき!

今のところ

/var/www/html/cakephp/app

と階層構造はなっていて。僕がしたんですけど。

そして、httpdのDocumentRootの設定は、

"/var/www/html/"となっているので、

「localhost:4567/cakephp」とアクセスしないといけない。

けど、これはダサいので、

localhost:4567でおkとしたい。

そのために


httpd.cnf

DocumentRoot "/var/www/html/cakephp/app/webroot"


と変更しておきました。

無事、「localhost:4567」だけでアクセスができるようになりました。

ただ、とても分からないのは、


httpd.cnf

<Directory "/var/www/html">

Options FollowSymLinks
AllowOverride All
</Directory>

この辺は書き換えなくても良いのか?ということです。

そもそも、よくわかってないんだな。orz。悲しい。

一旦このまま進めてみて、問題あれば、確認しよう。

力つきたので、ここ迄です。ありがとうございました。