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

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

ただいまの
回答率

88.04%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 520

score 27

前提・実現したいこと

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のファイルを上書きする方法でおすすめの方法を教えてください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

追記

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 上のファイルを取り出すときは次のコマンドが役立ちます:

cp -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 側で次のようにマウント・アンマウントします

マウント:

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

アンマウント:

net use Z: /delete

WSL は未検証です

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

元の回答

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

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

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

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

vagrant 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

vagrant plugin install vagrant-vbguest

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/25 23:23

    回答に追記しました

    キャンセル

  • 2020/08/26 09:20

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

    キャンセル

  • 2020/08/27 09:13

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

    キャンセル

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

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る