在尝试在每个项目安装中使用 php-7 版本的 Laravel Homestead 时,我在以下期间看到此错误vagrant up
:
php5-fpm: unrecognized service
我已经尝试vagrant destroy
并重新安装了 Vagrant 盒子,但它仍然回到了这个错误。
在全球范围内使用 Homestead 时我没有收到错误消息。
这怎么可能解决?
问题是,虽然box: laravel/homestead-7
在 中正确设置Homestead.yaml
,但 composer 依赖laravel/homestead
项仍在使用 php-5 版本。这意味着 Vagrant 的配置脚本vendor/laravel/homestead
是 php-5 而不是 php-7。
这可以通过使用laravel/homestead
composer 依赖项的特定分支来解决。
在composer.json
中,添加一个自定义存储库laravel/homestead
:
"repositories": [
{
"type": "git",
"url": "https://github.com/laravel/homestead"
}
]
并要求该php-7
分支专门用于laravel/homestead
:
"require-dev": {
"laravel/homestead": "dev-php-7"
}
然后composer update
重新配置 Vagrant 框将解决该问题。
更新
laravel/homestead
现在默认有 PHP 7.0,旧php-7
分支不再存在。要解决此问题,您只需将laravel/homestead
via更新到最新版本composer.json
。
为了快速解决问题,我发现laracasts 的这个答案非常有帮助:
cd ~/Homestead && git pull && vagrant destroy && vagrant box update && vagrant up
为了详细说明“只是销毁它并重新构建”方法......我更喜欢这个,而不是在网络上浮动的从 PHP 5.6 到 PHP 7 的就地 Homestead 升级的各种说明 - 它不需要很长,当你完成时,一切都感觉“更干净”。
(当然,如果您对 php.ini 或任何其他软件进行了更改,则需要再次执行这些操作。)
准备
mysqldump -u root -p [dbname] > [dbname]-backup.sql
(默认的宅基地 MySQL 根 pw 是secret
。)过程
vagrant halt
(如果你还没有)vagrant destroy [VM id]
添加 ID 是为了防止损坏错误的盒子。用于vagrant global-status
获取您的盒子列表;在第一列中使用 7 个字符的十六进制代码。git pull origin master
(如另一个答案中所述,现在没有单独的 PHP7 分支)bash init.sh
,但它复制的文件都是模板,因此您也可以不这样做并保留以前的版本。vagrant box add laravel/homestead
(现在我们回到标准安装说明。这在 VDSL 连接上大约需要 10 分钟。如果您对文档感到困惑,这是文件夹映射的示例:
folders:
- map: ~/Dropbox/websites-homestead
to: /home/vagrant/sites
sites:
- map: site1.app
to: /home/vagrant/sites/site1/public
- map: site2.app
to: /home/vagrant/sites/site2/public
databases:
- site1
- site2
所以......我的实际代码位于我计算机上的 ~/Dropbox/websites-homestead/site1 和 /site2 中,并且我已将它们的公共父目录映射到 VM 上的 /home/vagrant/sites 。Homestead 将使用您列出的名称创建空数据库。
vagrant up
(这将提供它)vagrant ssh
cd sites
(你应该能够看到你的代码)您现在应该能够做到这一点:
$sudo service php7.0-fpm status
* php-fpm7.0 is running
$php -v
PHP 7.0.2-4+deb.sury.org~trusty+1 (cli) ( NTS )
[...]
打开/etc/nginx/sites-available/your_site_conf然后更改这一行:
fastcgi_pass: /var/run/php5-fpm.sock;
至:
fastcgi_pass: /var/run/php/php7.0-fpm.sock;
然后重启nginx。
注意:这不是一个永久的解决方案,如果您运行配置命令 vagrant 将尝试自行设置并将覆盖第一行。