Laravel Homestead php-7 "php5-fpm: unrecognized service" on vagrant up
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/33791261/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Laravel Homestead php-7 "php5-fpm: unrecognized service" on vagrant up
提问by u1581544
Whilst trying to use the php-7 version of Laravel Homestead in a per-project installation, I see this error during vagrant up
:
在每个项目安装中尝试使用 Laravel Homestead 的 php-7 版本时,我在以下期间看到此错误vagrant up
:
php5-fpm: unrecognized service
php5-fpm: unrecognized service
I've tried vagrant destroy
and reinstalling the Vagrant box, but it still comes back to this error.
我试过vagrant destroy
并重新安装了 Vagrant 盒子,但它仍然回到这个错误。
I didn't get the error when using Homestead globally.
在全球范围内使用 Homestead 时我没有收到错误消息。
How might this be fixed?
如何解决这个问题?
回答by u1581544
The issue was that whilst box: laravel/homestead-7
was set correctly in Homestead.yaml
, the composer dependency for laravel/homestead
was still using the php-5 version. This meant that the provisioning scripts for Vagrant in vendor/laravel/homestead
were those for php-5 and not php-7.
问题是,虽然box: laravel/homestead-7
是在正确设置Homestead.yaml
,为作曲家的依赖laravel/homestead
仍然使用PHP-5版本。这意味着 Vagrant in 的配置脚本vendor/laravel/homestead
是用于 php-5 而不是 php-7 的脚本。
That can be fixed by using a specific branch of laravel/homestead
for the composer dependency.
这可以通过使用laravel/homestead
Composer 依赖项的特定分支来解决。
In composer.json
, add a custom repository for laravel/homestead
:
在 中composer.json
,添加一个自定义存储库laravel/homestead
:
"repositories": [
{
"type": "git",
"url": "https://github.com/laravel/homestead"
}
]
And require the php-7
branch specifically for laravel/homestead
:
并要求php-7
分支专门用于laravel/homestead
:
"require-dev": {
"laravel/homestead": "dev-php-7"
}
Then composer update
and re-provisioning the Vagrant box will fix the issue.
然后composer update
重新配置 Vagrant box 将解决这个问题。
UPDATE
更新
laravel/homestead
now has PHP 7.0 by default, and the old php-7
branch no longer exists. To resolve this issue, you simply need to update to the latest version of laravel/homestead
via composer.json
.
laravel/homestead
现在默认有 PHP 7.0,旧php-7
分支不再存在。要解决此问题,您只需更新到最新版本的laravel/homestead
via composer.json
。
回答by Bluesail20
For a quick fix, I found this answer from laracastsvery helpful:
为了快速修复,我发现laracasts 的这个答案非常有帮助:
cd ~/Homestead && git pull && vagrant destroy && vagrant box update && vagrant up
回答by William Turrell
To elaborate a bit more on the "just destroy it and build again" approach... I favour this over the various instructions for in-place Homestead upgrades from PHP 5.6 to PHP 7 that are floating around the web - it doesn't take very long and also everything feels "cleaner" when you've finished.
详细说明“只是销毁它并重新构建”方法......我更喜欢这一点,而不是在网上漂浮的从 PHP 5.6 到 PHP 7 的就地 Homestead 升级的各种说明 - 它不需要很长,而且当你完成时,一切都感觉“更干净”了。
(Of course, if you've made changes to your php.ini or any of the other software, you'll need to do these again.)
(当然,如果您对 php.ini 或任何其他软件进行了更改,则需要再次执行这些操作。)
Preparation
准备
- your projects should in a directory on your host computer that's shared with the Vagrant box, not on Vagrant box only, as that's about to be wiped
- vagrant ssh into your VM and put a mysqldump of each site's database in the site directory, e.g.
mysqldump -u root -p [dbname] > [dbname]-backup.sql
(the default homestead MySQL root pw issecret
.) - take a backup of everything (e.g. Mac Time Machine and/or do what I do and keep your projects in a Dropbox folder). You've got your git repository stored somewhere safely too, of course?
- Virtualbox users: no harm in exporting the entire box in case you get stuck and want to go bac to it (taking a snapshot isn't enough as any will also be wiped when the VM is destroyed.)
- 您的项目应该在与 Vagrant box 共享的主机上的目录中,而不是仅在 Vagrant box 上,因为它即将被擦除
- vagrant ssh 进入您的 VM 并将每个站点的数据库的 mysqldump 放在站点目录中,例如
mysqldump -u root -p [dbname] > [dbname]-backup.sql
(默认的 homestead MySQL 根密码是secret
.) - 备份所有内容(例如 Mac Time Machine 和/或做我所做的并将您的项目保存在 Dropbox 文件夹中)。当然,您的 git 存储库也安全地存储在某个地方吗?
- Virtualbox 用户:导出整个盒子没有坏处,以防万一你卡住了并想回到它(拍摄快照是不够的,因为当 VM 被破坏时,任何也会被擦除。)
Process
过程
vagrant halt
(if you haven't already)vagrant destroy [VM id]
Adding the ID is a precaution against destroying the wrong box. Usevagrant global-status
to get a list of your boxes; use 7-character hex code in first column.- in ~/Homestead on your host PC/Mac
git pull origin master
(as mentioned in the other answer, there's no separate PHP7 branch now) - you canre-run the bash script to create a clean Homestead.yaml file etc. -
bash init.sh
, but the files it copies are all templates, so you can also not do this and keep your previous versions. vagrant box add laravel/homestead
(now we're back on the standard installation instructions. This'll take about 10 minutes on a VDSL connection.- edit ~/.homestead/Homestead.yaml on your Mac/PC.
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。
Here's an example of the folder mapping if you're confused by the docs:
如果您对文档感到困惑,这里有一个文件夹映射示例:
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
So... my actual code lives in ~/Dropbox/websites-homestead/site1 and /site2 on my computer, and I've mapped their common parent directory to /home/vagrant/sites on the VM. Homestead will create empty databases with the name(s) you list.
所以...我的实际代码位于我计算机上的 ~/Dropbox/websites-homestead/site1 和 /site2 中,并且我已将它们的公共父目录映射到 VM 上的 /home/vagrant/sites。Homestead 将使用您列出的名称创建空数据库。
vagrant up
(this'll provision it)vagrant ssh
cd sites
(you should be able to see your code)- restore databases with `mysql -u root -p site1 < site1-backup.sql
- Providing you have /etc/hosts entries on your computer, you should be able to view your site. Check the .env file if it can't connect to the database.
vagrant up
(这将提供它)vagrant ssh
cd sites
(你应该能够看到你的代码)- 使用`mysql -u root -p site1 < site1-backup.sql 恢复数据库
- 如果您的计算机上有 /etc/hosts 条目,您应该能够查看您的站点。如果无法连接到数据库,请检查 .env 文件。
You should now be able to do this:
你现在应该能够做到这一点:
$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 )
[...]
回答by Reynaldo Roselló Nú?ez
open /etc/nginx/sites-available/your_site_confthen change this line:
打开/etc/nginx/sites-available/your_site_conf然后更改这一行:
fastcgi_pass: /var/run/php5-fpm.sock;
to:
到:
fastcgi_pass: /var/run/php/php7.0-fpm.sock;
And then restart nginx.
然后重启nginx。
Note: This is not a permanent solution, if you run provision command vagrant will try to setting up by itself and will overwrite with the first line.
注意:这不是一个永久的解决方案,如果您运行配置命令 vagrant 将尝试自行设置并覆盖第一行。