こんばんは!本日はVagrantでスーパーハマった内容、今後迷わないためにも書き記しておきたいと思います。

環境:
vagrant 1.7.4
VirtualBox 5.0.14

Vagrantの概要やインストールなどはいくらでも記事があるので割愛…
簡単に言うと、ローカルサーバーを簡単に構築したり、削除出来たりするヤツです。

WordPressの開発環境をMampからVagrantに変えたのですが、土日でトータル10時間くらいハマってました…おかげで理解が深まったよ…

あれだけ触るのが怖かったターミナルも全然慣れちゃったよ…

似たようなトラブルを抱えてる人の救いになればと思います…

サーバー構築は問題ないのに再起動すると接続できなくなる

はい。まずこれ。
始めにvagrant upして、サーバー作ります。
ここまでは問題ない。

設定したIPアドレスにも接続できる。
うんうん。

ところが一度vagrantをシャットダウンしてもう一度vagrant upすると、何故かIPアドレスに接続できなくなったのです…

ちなみにvagrantfileの内容とかは知人に作ってもらったのを使ってるので、細かい内容(chefとか使ってる…)はボクにはわかりません…

virtual boxを見ても確かにサーバーは起動してる。
vagrant statusで見ても確かにrunningって出てる。

意味わからーん!!と思い、色々調べてみると…

vagrant upした後に「vagrant ssh」でログインして

「service httpd start」とすると、サーバーがスタートする。

らしい…自動で立ち上がるよーに設定してくれたみたいなのですが、その部分が動いてなかったみたいだね…

これで無事ブラウザに表示されるよーになりまして、Wordpressも問題なく動きました!!

プラグインがインストールできない

はい。次はこれ。
問題なくWordpressが動く所まではきたのですが、今度はプラグインをインストールしようとすると、

FTP情報を入力してください。

………

………

いや、知らねーし。というかローカル環境にFTP関係ないし。

と思いながら調べてみると、どうやらWordpressの仕様みたい。

これはwp-config.phpに

define(‘FS_METHOD’,’direct’);

を記述してあげれば大丈夫とのこと。

で、やってみると見事回避!!
このままインストールできるかと思いきや…

ディレクトリが作成できません。とのエラー…

ここから地獄でした…
調べてみると、ほとんどの記事がwp-contentフォルダ内の

upgrade
themes
plugins

のパーミッションを707、もしくは777に変更したら大丈夫だよー!と書いてある。

その通りにやってみても、ウンともスンとも言わず…
確かにパーミッションは変更できてます。

中には「chmodでパーミッションが変更できない。」と書いてある記事もありましたが、その辺も大丈夫。確かに変更されてる。
(vagrantfileの中に、synced_folderの設定がされてたからのよう)

でもインストールできない…

深く調べてみると、ローカルのパーミッション変更しても、Vagrant側(サーバー側)のパーミッションは変更されないみたいだ…

言われてみれば、そりゃそうだ…

とゆーことで、どーすればいーのかを調べてみると、vagrantfileのsynced_folderの記述を

config.vm.synced_folder “./web”, “/var/web”, mount_options:[‘dmode=777′,’fmode=755’]

に変えてあげると大丈夫みたい。
dmodeがディレクトリのパーミッション、fmodeってのがファイルのパーミッションらしい。

これで無事インストールできました…

しかし戦いはまだ続く…

なげぇ…

css編集ができない

最後はこれ。最後にして、なかなかの強敵でした…

WordPressのファイルを触る時、ボクは二種類思いつきます。

1. テーマ編集からファイルを触る。
2. ローカルファイルもしくはFTPファイルを直接触る。

まず、どーあがいても前者は無理っぽい。とゆーかコイツとは戦いたくない。

何故なら更新ボタンが出ていないから。
もうパーミッションとは戦いたくない気持ちで一杯だったのですんなりと諦めることに。

残るは後者。
cssファイルを触って、ブラウザ更新してみると、問題なく変更されてる。

うん、大丈夫だ。

今思えば運がよかったのだろう…

もう一度編集、保存、ブラウザ更新。

変更されない…

もう一度保存、ブラウザ更新!!

変更されない…

なんでじゃ!!

調べていく内に、一つの結論に辿り着きます。それは…

更新されないのではなく、更新されるまでがとんでもなく遅いということ。

Vagrantはhtmlやcss、jsといった静的なファイルの同期通信をしない?たまにする?みたいな仕様らしいのです。

まぁ動的なものに対してのテスト環境を用意する。というシステムなので、理にはかなっているかと思います。

それは理解したとして、どうやったら解決するのか…時間かかった末に、たどり着いた答え…

Vagrantはsendfileというのを使って同期するみたい。

それを使わないで同期するように設定すればよい

ターミナルで設定できるようだ

とゆー事でやってみた内容がこちら。

1. 「vagrant ssh」でログイン
2. 「su」と入力
3. vagrant(パスワード)を入力
4. 「cd /etc/httpd/conf」で移動
5. 「vi httpd.conf」と打ち込みhttpd.confファイルを編集
6. <Directory “/var/web”>から</Directory>の間に「EnableSendfile off」と書いて保存
7. 「service httpd restart」でapacheの再起動

これで出来ました…
完全に準備は整った。

非常に長くなりましたが、ボクとVagrantの10時間戦争はこれで完結です。

ありがとうございました!