在 Homestead v13.2.1 中切换 PHP 版本(仅限某个项目)
1、在 Homestead 中执行 composer update 报错:Your requirements could not be resolved to an installable set of packages.。原因在于 PHP 版本为 8.0 ,而软件包的版本依赖于 7。如图1
vagrant@homestead:~/Code/laravel-8-shop$ composer update Loading composer repositories with package information Updating dependencies Your requirements could not be resolved to an installable set of packages. Problem 1 - Root composer.json requires laravel/nova ^3.14 -> satisfiable by laravel/nova[v3.14.0]. - laravel/nova v3.14.0 requires php ^7.2.5 -> your php version (8.0.1) does not satisfy that requirement. Problem 2 - Root composer.json requires laravel/ui 3.0 -> satisfiable by laravel/ui[v3.0.0]. - laravel/ui v3.0.0 requires php ^7.3 -> your php version (8.0.1) does not satisfy that requirement.
2、参考:https://learnku.com/docs/laravel/5.8/homestead/3882#multiple-php-versions 。Homestead 6 在同一个虚拟机上引入了对多个 PHP 版本的支持。你可以在你的 Homestead.yaml 文件中指定要用于给定站点的 PHP 版本。
sites: - map: laravel-8-shop-homestead.test to: /home/vagrant/Code/laravel-8-shop/public php: "7.4"
3、退出 vagrant 后,执行命令:cd ~/Homestead && vagrant provision && vagrant up。
vagrant@homestead:~/Code/laravel-8-shop$ ls /etc/php 5.6 7.0 7.1 7.2 7.3 7.4 8.0
4、重新进入后,发现 共享文件夹 竟然为空。如图2
5、决定还原第二步骤所做的更改。仍然为空。怀疑与开启 NFS 有关系,决定去掉:type: “nfs”。
folders: - map: E:/wwwroot/vagrant to: /home/vagrant/Code type: "nfs"
6、重启并应用虚拟机,执行命令:vagrant reload –provision
Lenovo@DESKTOP-QLPK8QM MINGW64 ~/Homestead (v12.1.0) $ vagrant reload --provision ==> homestead: Attempting graceful shutdown of VM... homestead: Guest communication could not be established! This is usually because homestead: SSH is not running, the authentication information was changed, homestead: or some other networking issue. Vagrant will force halt, if homestead: capable. ==> homestead: Forcing shutdown of VM... ==> homestead: Checking if box 'lc/homestead' version '11.0.0' is up to date... ==> homestead: Clearing any previously set forwarded ports... ==> homestead: Clearing any previously set network interfaces... ==> homestead: Preparing network interfaces based on configuration... homestead: Adapter 1: nat homestead: Adapter 2: hostonly ==> homestead: Forwarding ports... homestead: 80 (guest) => 8000 (host) (adapter 1) homestead: 443 (guest) => 44300 (host) (adapter 1) homestead: 3306 (guest) => 33060 (host) (adapter 1) homestead: 4040 (guest) => 4040 (host) (adapter 1) homestead: 5432 (guest) => 54320 (host) (adapter 1) homestead: 8025 (guest) => 8025 (host) (adapter 1) homestead: 9600 (guest) => 9600 (host) (adapter 1) homestead: 27017 (guest) => 27017 (host) (adapter 1) homestead: 22 (guest) => 2222 (host) (adapter 1) ==> homestead: Running 'pre-boot' VM customizations... ==> homestead: Booting VM... ==> homestead: Waiting for machine to boot. This may take a few minutes... homestead: SSH address: 127.0.0.1:2222 homestead: SSH username: vagrant homestead: SSH auth method: private key homestead: Warning: Connection aborted. Retrying... homestead: Warning: Connection reset. Retrying... homestead: homestead: Vagrant insecure key detected. Vagrant will automatically replace homestead: this with a newly generated keypair for better security. homestead: homestead: Inserting generated public key within guest... homestead: Removing insecure key from the guest if it's present... homestead: Key inserted! Disconnecting and reconnecting using new SSH key... ==> homestead: Machine booted and ready! ==> homestead: Checking for guest additions in VM... ==> homestead: Setting hostname... ==> homestead: Configuring and enabling network interfaces... ==> homestead: Mounting shared folders... homestead: /vagrant => C:/Users/Lenovo/Homestead homestead: /home/vagrant/Code => E:/wwwroot/vagrant ==> homestead: Detected mount owner ID within mount options. (uid: 1000 guestpath: /home/vagrant/Code) ==> homestead: Detected mount group ID within mount options. (gid: 1000 guestpath: /home/vagrant/Code) ==> homestead: Running provisioner: file... homestead: C:/Users/Lenovo/Homestead/aliases => /tmp/bash_aliases ==> homestead: Running provisioner: shell... homestead: Running: inline script ==> homestead: Running provisioner: shell... homestead: Running: inline script homestead: homestead: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDYbShMjEO5Jw9GNXNh7Nh7kqXtzuMRsj6EzOkaYY8u7niE/kd4M+YuVIuoImY2U1Huo1bQgsqIiHuyKobRLCFv/56W+rAD1d9wR2BNW1mjejwSLzKRVbr8HYnLpkqSJYom8UoZ4zkbuUz6wPvauCm/hKTLKYkCmWxt8LZjC7Y25JHAQflZFmhBI5jjcNQ4150yPobR+PmnJxrOmKDiAbLZVz5R+TfBF7cTO+KQbjDi4Ce1tzJM8u/ZTSMS6ESQN9FYMZUnhAqNS1STRex06l91Y+Tu496C/wC2CGWf1Ymqet6rmX8i0HnR/VEPa6ICTbsNfrbOGba98YVpnzJmGI4KFFiMc9DFwtkDR2th4+IdgBzW/FDGQFbzNll9jJR9bG2KfZpeUQiRC4BEgJxck4neXyEB5CdpR6X1Ej8jfyfynQrwrW4SPrgTwx+jMEiiG/8zhGigNqAWLyn0CUawlB4OHo8lLsiHCpq5WxWQkc42yPQD926FPFGxXxujVuWq2ps= wangqiang@fanxiapp.com homestead: ==> homestead: Running provisioner: shell... homestead: Running: inline script ==> homestead: Running provisioner: shell... homestead: Running: inline script ==> homestead: Running provisioner: shell... homestead: Running: inline script ==> homestead: Running provisioner: shell... homestead: Running: inline script ==> homestead: Running provisioner: shell... homestead: Running: inline script homestead: Invalid feature: mysql ==> homestead: Running provisioner: shell... homestead: Running: inline script homestead: Ignoring feature: mariadb because it is set to false ==> homestead: Running provisioner: shell... homestead: Running: inline script homestead: Ignoring feature: postgresql because it is set to false ==> homestead: Running provisioner: shell... homestead: Running: inline script homestead: Ignoring feature: ohmyzsh because it is set to false ==> homestead: Running provisioner: shell... homestead: Running: inline script homestead: Ignoring feature: webdriver because it is set to false ==> homestead: Running provisioner: shell... homestead: Running: C:/Users/Lenovo/AppData/Local/Temp/vagrant-shell20220829-23008-14upnya.sh ==> homestead: Running provisioner: shell... homestead: Running: C:/Users/Lenovo/AppData/Local/Temp/vagrant-shell20220829-23008-1iuztyd.sh ==> homestead: Running provisioner: Creating Certificate: laravel-8-shop-homestead.test (shell)... homestead: Running: script: Creating Certificate: laravel-8-shop-homestead.test homestead: Updating certificates in /etc/ssl/certs... homestead: rehash: warning: skipping duplicate certificate in ca.homestead.homestead.pem homestead: 1 added, 0 removed; done. homestead: Running hooks in /etc/ca-certificates/update.d... homestead: homestead: Adding debian:ca.homestead.homestead.pem homestead: done. homestead: done. ==> homestead: Running provisioner: Creating Site: laravel-8-shop-homestead.test (shell)... homestead: Running: script: Creating Site: laravel-8-shop-homestead.test ==> homestead: Running provisioner: shell... homestead: Running: inline script ==> homestead: Running provisioner: shell... homestead: Running: C:/Users/Lenovo/AppData/Local/Temp/vagrant-shell20220829-23008-540zib.sh ==> homestead: Running provisioner: Checking for old Schedule (shell)... homestead: Running: script: Checking for old Schedule ==> homestead: Running provisioner: Clear Variables (shell)... homestead: Running: script: Clear Variables ==> homestead: Running provisioner: Restarting Cron (shell)... homestead: Running: script: Restarting Cron ==> homestead: Running provisioner: Restart Webserver (shell)... homestead: Running: script: Restart Webserver ==> homestead: Running provisioner: Creating MySQL / MariaDB Database: laravel-8-shop-homestead (shell)... homestead: Running: script: Creating MySQL / MariaDB Database: laravel-8-shop-homestead homestead: We didn't find a PID for mariadb, skipping $DB creation ==> homestead: Running provisioner: shell... homestead: Running: C:/Users/Lenovo/AppData/Local/Temp/vagrant-shell20220829-23008-1q1lw98.sh ==> homestead: Running provisioner: Update motd (shell)... homestead: Running: script: Update motd ==> homestead: Running provisioner: shell... homestead: Running: C:/Users/Lenovo/AppData/Local/Temp/vagrant-shell20220829-23008-1006a48.sh
7、查看当前的 PHP 版本,默认为 8.0,那么 composer 执行使用仍然会使用 8.0,下载 composer.phar。参考:https://getcomposer.org/download/ 。进入项目根目录,复制命令粘贴后回车。如图3
vagrant@homestead:~/Code/laravel-8-shop$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" ed'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" vagrant@homestead:~/Code/laravel-8-shop$ php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" Installer verified vagrant@homestead:~/Code/laravel-8-shop$ php composer-setup.php All settings correct for using Composer Downloading... Composer (version 2.4.1) successfully installed to: /home/vagrant/Code/laravel-8-shop/composer.phar Use it: php composer.phar vagrant@homestead:~/Code/laravel-8-shop$ php -r "unlink('composer-setup.php');" vagrant@homestead:~/Code/laravel-8-shop$ ls app composer.lock package-lock.json routes webpack.mix.js artisan composer.phar phpunit.xml server.php yarn.lock auth.json config public storage bootstrap database README.md tests composer.json package.json resources vendor vagrant@homestead:~/Code/laravel-8-shop$ ls -l total 3762 drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 app -rwxrwxrwx 1 vagrant vagrant 1739 Aug 29 02:30 artisan -rwxrwxrwx 1 vagrant vagrant 124 Aug 29 02:30 auth.json drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 bootstrap -rwxrwxrwx 1 vagrant vagrant 2280 Aug 29 02:30 composer.json -rwxrwxrwx 1 vagrant vagrant 392484 Aug 29 02:30 composer.lock -rwxrwxrwx 1 vagrant vagrant 2799637 Aug 29 07:21 composer.phar drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 config drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 database -rwxrwxrwx 1 vagrant vagrant 943 Aug 29 02:30 package.json -rwxrwxrwx 1 vagrant vagrant 358262 Aug 29 02:30 package-lock.json -rwxrwxrwx 1 vagrant vagrant 1233 Aug 29 02:30 phpunit.xml drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 public -rwxrwxrwx 1 vagrant vagrant 4022 Aug 29 02:30 README.md drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 resources drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 routes -rwxrwxrwx 1 vagrant vagrant 590 Aug 29 02:30 server.php drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 storage drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 tests drwxrwxrwx 1 vagrant vagrant 8192 Aug 29 02:30 vendor -rwxrwxrwx 1 vagrant vagrant 581 Aug 29 02:30 webpack.mix.js -rwxrwxrwx 1 vagrant vagrant 271440 Aug 29 02:30 yarn.lock vagrant@homestead:~/Code/laravel-8-shop$
8、执行:php7.4 composer.phar update,不再报错。如图4
vagrant@homestead:~/Code/laravel-8-shop$ php7.4 composer.phar update Loading composer repositories with package information Updating dependencies Nothing to modify in lock file Installing dependencies from lock file (including require-dev) Nothing to install, update or remove Package moontoast/math is abandoned, you should avoid using it. Use brick/math instead. Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead. Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: facade/ignition Discovered Package: fruitcake/laravel-cors Discovered Package: laravel/nova Discovered Package: laravel/sail Discovered Package: laravel/sanctum Discovered Package: laravel/tinker Discovered Package: laravel/ui Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Discovered Package: overtrue/laravel-lang Discovered Package: srmklive/paypal Package manifest generated successfully. 86 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan vendor:publish --tag=laravel-assets --ansi --force No publishable resources for tag [laravel-assets]. Publishing complete. No security vulnerability advisories found vagrant@homestead:~/Code/laravel-8-shop$
9、未自动生成 .env 文件,手动复制 php artisan 相关的命令,手动执行。
vagrant@homestead:~/Code/laravel-8-shop$ php7.4 -r "file_exists('.env') || copy('.env.example', '.env');" vagrant@homestead:~/Code/laravel-8-shop$ ls -la total 3763 drwxrwxrwx 1 vagrant vagrant 0 Aug 29 07:57 . drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:29 .. drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 app -rwxrwxrwx 1 vagrant vagrant 1739 Aug 29 02:30 artisan -rwxrwxrwx 1 vagrant vagrant 124 Aug 29 02:30 auth.json drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 bootstrap -rwxrwxrwx 1 vagrant vagrant 2202 Aug 29 07:51 composer.json -rwxrwxrwx 1 vagrant vagrant 382659 Aug 29 07:27 composer.lock -rwxrwxrwx 1 vagrant vagrant 2799637 Aug 29 07:21 composer.phar drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 config drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 database -rwxrwxrwx 1 vagrant vagrant 276 Aug 29 02:30 .editorconfig -rwxrwxrwx 1 vagrant vagrant 3381 Aug 29 07:57 .env -rwxrwxrwx 1 vagrant vagrant 3381 Aug 29 02:30 .env.example drwxrwxrwx 1 vagrant vagrant 0 Aug 29 05:37 .git -rwxrwxrwx 1 vagrant vagrant 162 Aug 29 02:30 .gitattributes -rwxrwxrwx 1 vagrant vagrant 213 Aug 29 02:30 .gitignore drwxrwxrwx 1 vagrant vagrant 0 Aug 29 07:56 .idea -rwxrwxrwx 1 vagrant vagrant 943 Aug 29 02:30 package.json -rwxrwxrwx 1 vagrant vagrant 358262 Aug 29 02:30 package-lock.json -rwxrwxrwx 1 vagrant vagrant 1233 Aug 29 02:30 phpunit.xml drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 public -rwxrwxrwx 1 vagrant vagrant 4022 Aug 29 02:30 README.md drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 resources drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 routes -rwxrwxrwx 1 vagrant vagrant 590 Aug 29 02:30 server.php drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 storage -rwxrwxrwx 1 vagrant vagrant 208 Aug 29 02:30 .styleci.yml drwxrwxrwx 1 vagrant vagrant 0 Aug 29 02:30 tests drwxrwxrwx 1 vagrant vagrant 8192 Aug 29 07:27 vendor -rwxrwxrwx 1 vagrant vagrant 581 Aug 29 02:30 webpack.mix.js -rwxrwxrwx 1 vagrant vagrant 271440 Aug 29 02:30 yarn.lock vagrant@homestead:~/Code/laravel-8-shop$
10、访问首页,报错,查看 Context,PHP version 为 7.4.14。符合预期。如图5
近期评论