12

在尝试在每个项目安装中使用 php-7 版本的 Laravel Homestead 时,我在以下期间看到此错误vagrant up

php5-fpm: unrecognized service

我已经尝试vagrant destroy并重新安装了 Vagrant 盒子,但它仍然回到了这个错误。

在全球范围内使用 Homestead 时我没有收到错误消息。

这怎么可能解决?

4

4 回答 4

14

问题是,虽然box: laravel/homestead-7在 中正确设置Homestead.yaml,但 composer 依赖laravel/homestead项仍在使用 php-5 版本。这意味着 Vagrant 的配置脚本vendor/laravel/homestead是 php-5 而不是 php-7。

这可以通过使用laravel/homesteadcomposer 依赖项的特定分支来解决。

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/homesteadvia更新到最新版本composer.json

于 2015-11-18T22:00:45.520 回答
9

为了快速解决问题,我发现laracasts 的这个答案非常有帮助:

cd ~/Homestead && git pull && vagrant destroy && vagrant box update && vagrant up
于 2016-01-07T02:11:33.737 回答
4

为了详细说明“只是销毁它并重新构建”方法......我更喜欢这个,而不是在网络上浮动的从 PHP 5.6 到 PHP 7 的就地 Homestead 升级的各种说明 - 它不需要很长,当你完成时,一切都感觉“更干净”。

(当然,如果您对 php.ini 或任何其他软件进行了更改,则需要再次执行这些操作。)

准备

  • 您的项目应该在主机上与 Vagrant 盒共享的目录中,而不是在 Vagrant 盒上,因为它即将被擦除
  • vagrant ssh 进入你的虚拟机,并将每个站点的数据库的 mysqldump 放在站点目录中,例如mysqldump -u root -p [dbname] > [dbname]-backup.sql(默认的宅基地 MySQL 根 pw 是secret。)
  • 备份所有内容(例如 Mac Time Machine 和/或做我所做的并将您的项目保存在 Dropbox 文件夹中)。当然,您也将 git 存储库安全地存储在某个地方?
  • Virtualbox 用户:导出整个盒子是没有害处的,以防你卡住并想返回它(拍摄快照是不够的,因为当 VM 被销毁时,任何快照也会被擦除。)

过程

  • vagrant halt(如果你还没有)
  • vagrant destroy [VM id]添加 ID 是为了防止损坏错误的盒子。用于vagrant global-status获取您的盒子列表;在第一列中使用 7 个字符的十六进制代码。
  • 在您的主机 PC/Mac 上的 ~/Homestead 中git pull origin master(如另一个答案中所述,现在没有单独的 PHP7 分支)
  • 可以重新运行 bash 脚本以创建一个干净的 Homestead.yaml 文件等 - bash init.sh,但它复制的文件都是模板,因此您也可以不这样做并保留以前的版本。
  • vagrant box add laravel/homestead(现在我们回到标准安装说明。这在 VDSL 连接上大约需要 10 分钟。
  • 在 Mac/PC 上编辑 ~/.homestead/Homestead.yaml。

如果您对文档感到困惑,这是文件夹映射的示例:

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(你应该能够看到你的代码)
  • 使用 `mysql -u root -p site1 < site1-backup.sql 恢复数据库
  • 如果您的计算机上有 /etc/hosts 条目,您应该能够查看您的站点。如果无法连接到数据库,请检查 .env 文件。

您现在应该能够做到这一点:

$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 )
[...]
于 2016-02-08T14:17:58.860 回答
2

打开/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 将尝试自行设置并将覆盖第一行。

于 2016-03-17T17:20:31.307 回答