質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Q&A

解決済

1回答

1130閲覧

vagrantのcakephp3の開発環境で同期を簡単にする方法

nanamin

総合スコア27

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

0グッド

0クリップ

投稿2020/08/24 14:39

編集2020/08/24 22:22

前提・実現したいこと

vagrantにcentos7を入れて、composerでcakephp3をインストールしようとしています。
プロジェクトのファイルを
windowsのエクスプローラからatomなどを使って直接編集して、centos7のプロジェクト内に同期させたいと考えています。
ただ、vagrantfileのマウント場所に、プロジェクトをインストールしようとするも、どうしてもインストールエラーになります。

環境は、windows10,vagrant2.2.9,centos7.7,php7.4,cakephp3.9です。

###試したこと
vagrantfileの中の同期設定で、

# config.vm.synced_folder "../data", "/vagrant_data" config.vm.synced_folder "../data", "/home/vagrant"

と変えてみたところ、/home/vagrantではインストールできず
他のディレクトリ(/var/www/html/)で試してみたところ、インストールはできます。

そして、再びvagrantfileでマウント場所を(/var/www/html)に変えてみると、今度はそのプロジェクトは消えてしまいます。ただし、# vim hoge.txtなどと別のファイルを作り、共有することはできます。
そして、/var/www/htmlでプロジェクトを作ろうとすると以下のメッセージが流れます。

Creating a "cakephp/app:^3.9" project at "./caketest01" Installing cakephp/app (3.9.0) - Installing cakephp/app (3.9.0): Loading from cache Created project in /var/www/html/caketest01 Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 83 installs, 0 updates, 0 removals - Installing cakephp/plugin-installer (1.2.0): Loading from cache Plugin installation failed (include(/var/www/html/caketest01/vendor/cakephp/plugin-installer/src/Installer/PluginInstaller.php): failed to open stream: No such file or directory), rolling back - Removing cakephp/plugin-installer (1.2.0) [RuntimeException] Could not delete /var/www/html/caketest01/vendor/cakephp/plugin-installer/s rc/Installer: create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--add-repository] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--ignore-platform-reqs] [--] [<package>] [<directory>] [<version>]

まとめ

テキストエディタでCtrl + Sしたときに、linux上のcakephp3のファイルを上書きする方法でおすすめの方法を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

追記

synced_folder でマウントしたディレクトリーは
Windows のディスクなのでシンボリックリンクを作成することができない他、
権限も規定では 777 となります
特にシンボリックリンクは PHP で使われることが多いので
Composer のインストールが失敗する原因になりやすいです

自分の場合は、次のどちらかの対応を行っていました

選択 A: ファイルを絞って Windows からマウント

シンボリックリンクなどが含まれたディレクトリーは
Windows のディスク上で扱うことができませんので、
それ以外のファイルだけを Windows 上で管理するようにします

PHP のプロジェクトによっては
vendor ディレクトリーさえ Linux のディスクにしておけば
動作するものもあるので、その場合はこの方法を使います

ただし、Linux のディスクにあるファイルを取り出すときは
Windows 側の空のフォルダーを Linux 側のファイルのパスにマウントしても取り出せません
マウントは既存のファイル・ディレクトリーを隠し、
マウントしたファイル・ディレクトリーを表示します
Answer: Vagrant shared folders wipes all the contents in my folders
Answer: What does Linux do with existing files in a mount point?
mount(8): mount filesystem - Linux man page

Linux 上のファイルを取り出すときは次のコマンドが役立ちます:

console

1cp -ipr /path/to/source /path/to/destination

選択 B: 仮想マシンのボリュームを Windows にマウント

どうしてもシンボリックリンク等のファイルを扱う必要がある場合は
Vagrant の synced_folder の利用を諦め、
Samba を使って Linux 側のディスクを Windows にマウントします

Sambaの基本を知っておこう:基礎から理解するLinuxサーバー[Cent OS 7.0編](7) - @IT

インストール手順は、次の Ansible コードが参考になります
(Ansible が実行できなくても、読めばインストール手順としては参考になると思います)
ansible-role-samba-amazon-linux/main.yml at master · yukihiko-shinoda/ansible-role-samba-amazon-linux

正しくインストールすれば、Samba のサービスが Linux 側で起動するので
Windows 側で次のようにマウント・アンマウントします

マウント:

console

1net use Z: \172.28.128.3\workspace /user:vagrant vagrant

アンマウント:

console

1net use Z: /delete

WSL は未検証です

上記の知識は WSL 以前のものなので、
もしかすると WSL を使えば別の解決方法があるかもしれません

元の回答

Vagrantfile

1config.vm.synced_folder "../data", "/var/www/html"

この書式でマウントできるはずです

vagrantfileでマウント場所を(/var/www/html)に変えてみると、
今度はそのプロジェクトは消えてしまいます。

Windows 側の data フォルダーの中が空にされてしまうということでしょうか?
Vagrant 自体にはそのような処理はないはずなので、仮想マシンを起動するときに
次のコマンドで起動して何も起きず無事にマウントできるようにならないか確認してみてはいかがでしょうか?

console

1vagrant up --no-provision

上記のコマンドは、起動時のプロビジョニング処理を抑制します
プロビジョニング処理の内容にもよりますが、
この処理で問題なくマウントできれば、プロビジョニング処理が想定外の動作をしていることになります

vagrant up - Command-Line Interface | Vagrant by HashiCorp

仮想マシンに GuestAdditions はインストールしましたか?
GuestAdditions がインストールされていないと
ファイル共有は行なえません

vagrant-vbguest をインストールしておくと、
自動的に GuestAdditions をインストールしてくれるので便利かもしれません

dotless-de/vagrant-vbguest: A Vagrant plugin to keep your VirtualBox Guest Additions up to date

console

1vagrant plugin install vagrant-vbguest

また、vagrant upvagrant reload した際に、次のログは表示されましたか?

console

1==> default: Checking for guest additions in VM... 2==> default: Mounting shared folders... 3 default: /vagrant => C:/Users/Public/workspace/test-vagrant-287111 4 default: /var/www/html => C:/Users/Public/workspace/data

このログはフォルダーが正常にマウントされたことを示しています
もし、このログが表示されていない場合は、
仮想マシンが起動した際になんらかのエラーが発生しているものと思われます
その場合は、起動した際のメッセージを確認すると、原因を調べることができます

投稿2020/08/24 15:09

編集2020/08/25 14:26
y_shinoda

総合スコア3272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nanamin

2020/08/24 15:30 編集

コメントを頂きまして、大変ありがとうございます。 dev04がVagrantfileがある場所です。 /var/www/htmlにエラーがでたので、/home/vagrantにプロジェクトを作り直し、できたので、exitし、 vagrantfileのマウント場所を/home/vagrantに直し、再びvagrant upをオプション付きで指定しました。 C:\Users\username\dev04>vagrant up --no-provision をしてみたところ、以下のようになり、マウントされません。 以下がメッセージです。 Bringing machine 'default' up with 'virtualbox' provider... ==> default: Checking if box 'bento/centos-7.7' version '202005.12.0' is up to date... ==> default: Machine not provisioned because `--no-provision` is specified. C:\Users\username\dev04>
nanamin

2020/08/24 15:37

すみません。 vagrant haltをし忘れてていました。 再びオプション付きでvagrant upしてみたところ、 default: /home/vagrant => C:/Users/username/data ==> default: Machine not provisioned because `--no-provision` is specified. になり、puttyでログインしてみたところ、プロジェクトが消えていました。
nanamin

2020/08/24 15:40

puttyの画面 -bash-4.2$ pwd /home/vagrant -bash-4.2$ ls -lta total 4 drwxrwxrwx. 1 vagrant vagrant 4096 Aug 25 00:23 . drwxr-xr-x. 3 root root 21 May 13 03:25 .. -bash-4.2$ [vagrant@localhost vagrant] $ という表記にならないんですが、これも原因なのでしょうか?
y_shinoda

2020/08/24 15:41

回答を追記しました 「プロジェクトが消えている」というのは、 「Windows 側には残っているけれど、仮想マシン側にはない」 という状態という認識で合っていますでしょうか?
nanamin

2020/08/24 15:43

C:\Users\username\dev04>vagrant plugin list vagrant-hostmanager (1.8.9, global) vagrant-omnibus (1.5.0, global) vagrant-vbguest (0.24.0, global) C:\Users\username\dev04> と出ます。インストールされているようです。
nanamin

2020/08/24 15:43

仮想マシン側にはないという解釈です。
y_shinoda

2020/08/24 16:12

回答に追記しました
nanamin

2020/08/24 16:16

大変ありがとうございます。 以下がvagrant upした際のログです。 C:\Users\username\dev04>vagrant up --no-provision Bringing machine 'default' up with 'virtualbox' provider... ==> default: Checking if box 'bento/centos-7.7' version '202005.12.0' is up to date... ==> default: Clearing any previously set forwarded ports... ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key ==> default: Machine booted and ready! [default] GuestAdditions 6.1.12 running --- OK. ==> default: Checking for guest additions in VM... ==> default: Configuring and enabling network interfaces... ==> default: Mounting shared folders... default: /vagrant => C:/Users/username/dev04 default: /home/vagrant => C:/Users/username/data ==> default: Machine not provisioned because `--no-provision` is specified. C:\Users\username\dev04> このように出ます。
y_shinoda

2020/08/24 16:29

現在の Vagrantfile は次のような設定になっていると思います config.vm.synced_folder "../data", "/home/vagrant" 次のように設定を変えたときも、うまくマウントできるのではないでしょうか? config.vm.synced_folder "../data", "/var/www/html"
nanamin

2020/08/24 16:59

本当にありがとうございます。 それができないんですよね。プロジェクトが消えてしまいます。 # vim hoge.txt として、何か書き込むと、windows側にはそのファイルが現れます。 プロジェクトだけ消えてしまうという状況です。 ここでcomposerインストールすると、上のようなエラー画面になります。
y_shinoda

2020/08/24 17:03

/var/www/html にしたときは、次のログが表示されますか? ==> default: Mounting shared folders... default: /vagrant => C:/Users/username/dev04 default: /var/www/html => C:/Users/username/data
nanamin

2020/08/24 17:15

C:\Users\username\dev04>vagrant up --no-provision Bringing machine 'default' up with 'virtualbox' provider... ==> default: Checking if box 'bento/centos-7.7' version '202005.12.0' is up to date... ==> default: Clearing any previously set forwarded ports... ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Connection aborted. Retrying... ==> default: Machine booted and ready! [default] GuestAdditions 6.1.12 running --- OK. ==> default: Checking for guest additions in VM... ==> default: Configuring and enabling network interfaces... ==> default: Mounting shared folders... default: /vagrant => C:/Users/username/dev04 default: /var/www/html => C:/Users/username/data ==> default: Machine not provisioned because `--no-provision` is specified. されますね。
y_shinoda

2020/08/24 17:26

こちらで検証すると、 次のように、 ls -la コマンドで /var/www/html に Windows 側のディレクトリーがマウントされていることが確認できます $ vagrant ssh This system is built by the Bento project by Chef Software More information can be found at https://github.com/chef/bento Last login: Mon Aug 24 16:01:29 2020 from 10.0.2.2 [vagrant@localhost ~]$ ls -la /var/www/html total 0 drwxrwxrwx. 1 vagrant vagrant 0 Aug 24 15:54 . drwxr-xr-x. 3 root root 18 Aug 24 16:07 .. -rwxrwxrwx. 1 vagrant vagrant 0 Aug 24 15:54 hello.txt [vagrant@localhost ~]$ そちらで検証すると、このようにはならないでしょうか?
nanamin

2020/08/24 21:26

ただのファイルに関してはマウントできることが確認できますが、 composerでプロジェクトフォルダをインストールすると、上記のようなエラーがでるという具合です。 ①ただのファイルは共有(マウント)はできるが、composerによるプロジェクトフォルダはインストールできない。上記のようなエラーがでる。 ②マウント指定していない別のディレクトリでcomposerによるプロジェクトフォルダのインストールはできる。 ③Vagrantfileに②のプロジェクトフォルダの位置をマウント場所として変更すると、変更後、プロジェクトフォルダ自体が消える。 というような状況です。
nanamin

2020/08/25 12:50 編集

シンボリックリンクもエラーで、他ディレクトリではプロジェクトはできるので、作成後、マウントされるディレクトリーにコピーを試みるも、プロトコルエラーでコピーできませんでした。
y_shinoda

2020/08/25 14:23

回答に追記しました
nanamin

2020/08/26 00:20

なるほど。SAMBAサーバですか。 SAMBAをたてて対応してみることにします。
nanamin

2020/08/27 00:13

無事できました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問