今までの開発の方式にならってMEAN.IOを使うのにも
Vagrantの共有フォルダで開発をしていたが、結論から言うと
MEAN.IOを使うときはVagrantの共有フォルダは絶対に使わないほうがいい。
MEAN.IOの折角の便利な機能が全然使えなくなるし、
エラーが連発する。
工夫したら使えるようにする事もできなくはないが、
断然効率が悪い。
原因の多くは、Vagrantの共有フォルダでchmodができないことにある。
頑張って結局できなかったことがおおくて、悔しかったので記録しておく。
今までの開発の方式にならってMEAN.IOを使うのにも
Vagrantの共有フォルダで開発をしていたが、結論から言うと
MEAN.IOを使うときはVagrantの共有フォルダは絶対に使わないほうがいい。
MEAN.IOの折角の便利な機能が全然使えなくなるし、
エラーが連発する。
工夫したら使えるようにする事もできなくはないが、
断然効率が悪い。
原因の多くは、Vagrantの共有フォルダでchmodができないことにある。
頑張って結局できなかったことがおおくて、悔しかったので記録しておく。
結論から、
私の結論としてはnodemonを使うしかないかと。
ソース監視の方式に
nodemon
supervisor
node-dev
pm2
っといったアプリがありますが、すべてデフォルトではVagrantの共有フォルダに反応してくれません。
試行錯誤で結局全て試してしまったので、紹介する。
nodemonをインストール
|
1 |
npm install nodemon -g |
後はnodeコマンドの代わりにnodemonを使うだけ
|
1 |
$ nodemon server.js |
これがスタンダードなやり方。
VagrantのSynced folderを使っている場合には遅くするために”L”というオプションをつけて、
|
1 |
$ nodemon -L server.js |
っとしなくてはいけないのですが、これが何故か上手くいかない。
何故かと言うと、↑のコマンドではファイルの更新を監視する対象(watch)
が「*.*」っとなっている、これでは同階層のファイルに対する変更しか監視しない。
監視したい対象は自分で指定する必要がある。
私の場合はこんな感じ。
|
1 |
nodemon -L server.js -watch packages/**/**/**/* packages/**/**/* |
これでOK。
Vagrantの共有フォルダで更新を監視したいだけなら、ココまでの部分でOK。
以降は蛇足。
supervisorをインストールした。
|
1 |
$ npm install supervisor -g |
無視するファイルとディレクトリの指定は -i
npmでインストールをかけたときに異常に再起動しないために
|
1 |
$ supervisor -i node_modules server.js |
としてみたけど、結局VagrantのSynced Folderでは、これも結局使えない。
|
1 |
$ npm install node-dev -g |
$ npm install pm2 -g
こうです。
|
1 |
$ pm2 start server.js --watch |
そうするとこう。
|
1 2 3 4 5 6 |
$ pm2 list ┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────────┐ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ watching │ ├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────────┤ │ server │ 0 │ fork │ 24446 │ online │ 1 │ 13s │ 0% │ 46.3 MB │ enabled │ └──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────────┘ |
ただひとつ残念なのが、今まで標準出力でリアルタイムに監視できてたログが見えなくなってしまうこと、標準出力がどこに言っているかというと
~/.pm2/logs/ ここ
ここに、
エラー:server-error-0.log
標準出力:server-out-0.log
っとわけて収納されている。
リアルタイム監視をしたいなら
|
1 |
$ tail -f ~/.pm2/logs/server-error-0.log |
っとすればリアルタイム監視ができます。
pm2での監視もういいよってなったらこう。
|
1 |
$ pm2 delete all |
ただSynced Folderで使えない。
|
1 |
vagrant up |
とすると
なぜだか、急にvagrantが立ち上がらなくなってしまった。
立ち上がらない、というより↓みたいなメッセージが止まらない
|
1 |
default: Warning: Remote connection disconnect. Retrying |
原因を探ることもできるけど、
|
1 2 |
vagrant -v Vagrant 1.8.1 |
まずvagrantをアップグレードしてみる。
取り敢えず消します。
|
1 |
sudo rm -rf /usr/local/bin/vagrant |
vagrant upを試してみた。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
sudo vagrant up Password: Vagrant failed to initialize at a very early stage: The plugins failed to initialize correctly. This may be due to manual modifications made within the Vagrant home directory. Vagrant can attempt to automatically correct this issue by running: vagrant plugin repair If Vagrant was recently updated, this error may be due to incompatible versions of dependencies. To fix this problem please remove and re-install all plugins. Vagrant can attempt to do this automatically by running: vagrant plugin expunge --reinstall |
まずは、
|
1 |
sudo vagrant plugin expunge --reinstall |
を試してみても、エラーが出ている
|
1 |
sudo vagrant plugin repair |
また
まだ治らない。。
ちょっと一旦この問題は置いておいて違うフォルダでvagrantを実行すると
|
1 2 3 4 5 6 7 8 9 |
vagrant up The VirtualBox VM was created with a user that doesn't match the current user running Vagrant. VirtualBox requires that the same user be used to manage the VM that was created. Please re-run Vagrant with that user. This is not a Vagrant issue. The UID used to create the VM was: 501 Your UID is: 0 |
のエラーが発生
|
1 |
sudo vi .vagrant/machines/default/virtualbox/creator_uid |
これを
|
1 |
0 |
と書き換えればOK。
これで、
|
1 2 |
The UID used to create the VM was: 501 Your UID is: 0 |
の問題は解決。
でも、まだ元の
|
1 |
default: Warning: Remote connection disconnect. Retrying |
が繰り返す問題はまだ未解決。
いろいろやってもこの問題はどうしても解決しません。
残念ながら。
再インストールするしかない。
ということで、
|
1 2 |
sudo vagrant destroy sudo vagrant up |
一応これで解決しますが、残念ながら初期状態に戻ってしまった。
取り敢えず、インストールするディレクトリを作成。
|
1 2 |
user-no-MacBook-Pro:Vagrant user$ mkdir vagrant_centos7 user-no-MacBook-Pro:Vagrant user$ cd vagrant_centos7/ |
CentOS7.2をインストール。
|
1 |
vagrant box add centos7.2 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box |
思い出してみたら結構重かったので、昔に追加したBOXを確認して
|
1 2 3 4 |
user-no-MacBook-Pro:DGB-centos65 user$ vagrant box list base (virtualbox, 0) centos-6.3 (virtualbox, 0) centos64 (virtualbox, 0) |
そこらからインストール。
|
1 |
vagrant init centos64 |
結局、CentOS6.4をインストールしました。