使用 Laravel Homestead:'没有指定输入文件'

Posted

技术标签:

【中文标题】使用 Laravel Homestead:\'没有指定输入文件\'【英文标题】:Using Laravel Homestead: 'no input file specified'使用 Laravel Homestead:'没有指定输入文件' 【发布时间】:2014-08-08 02:09:42 【问题描述】:

我是使用 Laravel 和 Homestead 的新手,如果能提供任何帮助或指出正确的方向,我将不胜感激。当我运行“php artisan serve”时,我已经成功进入“你已经到达”屏幕,但是当我尝试通过 Vagrant 做同样的事情时,我得到“没有指定输入文件”。我的 Homestead.yaml 文件如下所示:

authorize: /Users/me/.ssh/id_rsa.pub

keys:
    - /Users/me/.ssh/id_rsa

folders:
    - map: /Users/me/code/exampleproject
      to: /home/vagrant/code/exampleproject

sites:
    - map: exampleproject.app
      to: /home/vagrant/code/exampleproject/public

variables:
    - key: APP_ENV
      value: local

在我的电脑上,我有以下目录:

/Users/me/code/Homestead
/Users/me/code/exampleproject //this is the directory created with composer

在我的 Vagrant Box 上,出于某种原因,我有两个名为“code”和“Code”的目录:

/home/vagrant/code/exampleproject 
/home/vagrant/Code

我已经检查过了,我可以看到对我的计算机 exampleproject 文件所做的更改反映在 vagrant box 文件中。

不确定如何解决这个问题!我真的很感激任何可能的帮助:)

【问题讨论】:

【参考方案1】:

请注意,linux 区分大小写。这可能就是您看到“代码”和“代码”目录的原因。

我要做的是再次重做 vagrant 设置,如果您想保持简单并匹配 Homestead 框默认的内容,请将您的主机中的目录“代码”设为大写。

您也可以在“文件夹”部分中仅映射到您机器中的“代码”文件夹,以防您稍后决定将更多站点添加到您的 Homestead 设置中。这样,在 /home/vagrant/Code/ 下,您将看到所有站点项目,并且您可以将更多站点指向它们的“公共”目录。

【讨论】:

谢谢,@noeldiaz!昨天,我终于按照你说的做了。我再次下载了 vagrant,然后用“rm -r Homestead”删除了我的 Homestead 目录,然后做了 vagrant up,当我看到 vagrant up 过程运行了一些额外的东西,比如启动 nginx 服务器。当我尝试该网站时,它起作用了!此外,“代码”“代码”文件夹问题消失了 :) 就“文件夹”部分而言,我也完成了您的建议。我/我有点害怕,因为我似乎不明白如何调试服务器/虚拟机问题',但会继续!非常感谢您的帮助:)【参考方案2】:

不要重新安装试试

vagrant up --provision

homestead up --provision

【讨论】:

vagrant up --provision 对我不起作用,但 homestead up --provision 对我有用 非常感谢! 只要vagrant reload --proivision 这个方法也行得通,你也可以试试 vagrant destroy 和 vagrant up 然后我把所有的配置都做好了,它更干净了。 嗨,我在这里遇到了同样的问题,而不是 homestead 我在 cpanel 中运行它有什么建议吗?【参考方案3】:

如果有人遇到这个问题,请给出我的回复。

    您可能需要验证“/etc/ngnx/sites-available/domain”中的 server.root 配置是否与“Homestead.yaml”中的 sites.to 配置相匹配。

    如果不匹配,则更改它并使用“sudo service nginx restart”重新启动网络服务器

    仍然无法正常工作,然后将“YOURSITE/app/storage”文件夹的写入权限设置为“chmod -R 777 app/storage”

【讨论】:

【参考方案4】:

我也遇到了同样的问题,我认为 Laravel 是“开箱即用”安装的,但似乎并非如此。我通过 SSH 连接到机器并运行以下命令:

cd Code
sudo composer self-update #not necessary, but I did it anyways
composer create-project laravel/laravel Laravel --prefer-dist

一切都照常进行。

【讨论】:

谢谢阿尔达!那是关键。我花了几个小时 :( 你必须进入虚拟机并运行:composer create-project laravel/laravel folder-name 重要的是要了解“未指定输入文件”错误,在您的主机上查看 Homestead.yaml 的配置 -> 此文件包含您的站点映射(地图:homestead.test to: /home/vagrant/code/public ) 这意味着如果你去你的虚拟机到 root-> /home/vagrant/code/public/ 你必须在那里有你的 html php 文件。如果没有,运行:composer create-project laravel/laravel :) 如果一切正常,那么你必须知道“~/”的意思是“c:/windows/users/yourname/”,所以会有你的 sincronized 文件从流浪者到你的主人 在拉了几个小时的头发之后,作为 Laravel 的新手,这是关键。我最成功的方法是先安装 laravel,然后再添加每个项目的宅基地。【参考方案5】:

这很容易解决,因为您已将文件夹名称更改为:exampleproject

所以 SSH 到你的流浪者:

ssh vagrant@127.0.0.1 -p 2222

然后更改您的 nginx 配置:

sudo vi /etc/nginx/sites-enabled/homestead.app

编辑 正确的 URI 到第 3 行的根目录到此新文件夹名称

root "/Users/MYUSERNAME/Code/exampleproject/public";

重启 Nginx

sudo service nginx reload

重新加载网络浏览器,它现在应该可以工作了

【讨论】:

这个问题在所有网络上的最佳答案。赞! 这锁定了我的电脑。如果给出这些命令的原因会很好 - 确切地说为什么需要它们以及它们在做什么。【参考方案6】:

我遇到了同样的问题,并通过使用 larachat 找到了解决方案。

以下是修复它的方法,您需要正确设置 homestead.yaml 文件。如果您想知道它是如何完成的,请遵循 Homestead 2.0 https://laracasts.com/lessons/say-hello-to-laravel-homestead-two 上的 Jeffery Way 教程。

现在要修复 Input not specified 问题,您需要 ssh 进入宅基地框并输入

serve domain.app /home/vagrant/Code/path/to/public/directory 这将为 nginx 生成一个服务脚本。每次切换项目时都需要这样做。

他还讨论了我在本系列中解释的内容https://laracasts.com/series/laravel-5-fundamentals/

【讨论】:

这正是我想要的。谢谢鲁迪! 我猜如果在 Homestead 中添加另一个项目会出现问题,对吧?是不是可以为所有人自动运行serve 感谢分享教程。现在开始工作了! 全新安装 vagrant、virtualbox、homestead... 并尝试 destroy/up,serve 命令终于奏效了。谢谢【参考方案7】:

我在编辑 Homestead.yaml 后出现了这个问题。我通过

解决了这个问题
homestead destroy
homestead up

【讨论】:

很遗憾这对我也有效,这导致我的数据库每次都被破坏。你找到解决办法了吗? 你也许可以只做“宅基地供应”。另外,如果您还没有,我建议您设置播种器和迁移,这样您就可以减少对数据库的保护。 这解决了我的问题:D,这很好:laracasts.com/lessons/say-hello-to-laravel-homestead-two【参考方案8】:

重启你的家园。为我工作。

homestead destroy
homestead up

【讨论】:

【参考方案9】:

这可能是因为 nginx 网络服务器没有指向正确的路径。

您应该查看两个键:folders 下的 map 键和 sites 下的 to 键。 folders 键将本地计算机上的文件夹映射到 vagrant VM。 sites键用于在nginx上创建一个虚拟主机,其值为to

您要确保sites 下的to 指向public 的正确路径。

问题是我使用 composer create laravel/laravel 创建了我的 laravel 项目。这在我的当前目录中创建了一个名为 laravel 的文件夹。然后在不更改目录的情况下,我使用composer require laravel/homestead --dev 安装了宅基地助手。

运行php vendor/bin/homestead makevagrant up 后,我的目录结构如下所示:

$ cd laravel51
$ ls -a
.
..
.vagrant
laravel
composer.json
composer.lock
vendor
Homestead.yml
Vagrantfile 

我的 Homestead.yml 看起来像这样:

folders:
    - map: "/Users/USER/Sites/sandbox/php/laravel51"
      to: "/home/vagrant/laravel51"

sites:
    - map: laravel51
      to: "/home/vagrant/laravel51/public"

如果你仔细观察,/Users/USER/Sites/sandbox/php/laravel51 路径将被挂载到 vagrant VM 上。这是错误的目录,因为它应该指向你的 app 目录所在的 laravel 项目根目录。这里发生的事情是,当我在项目根目录中时,我应该需要宅基地帮手。

所以现在的问题是我该怎么办?您有两个选择:摆脱当前的宅基地虚拟机并重新开始,但这次从项目根目录挽救您已经拥有的东西。

如果你想挽救你所拥有的,你必须将几个文件和一个文件夹移动到你的 laravel 项目根目录。

这些是您需要移动的工件:

.vagrant
Homestead.yml
Vagrantfile

composer.json 将不再需要,因为您稍后会需要它。

将这些文件移动到您的 laravel 项目根目录并将您当前的工作目录更改为那里 (cd laravel)。此时只需更新folders 下的map 并确保它指向项目根目录。还要确保sites 下的to 键是folders 下的to 键并附加了/public

例如:

folders:
    - map: "/Users/USER/Sites/sandbox/php/laravel51/laravel"
      to: "/home/vagrant/laravel51"

sites:
    - map: laravel51
      to: "/home/vagrant/laravel51/public"

现在运行composer require laravel/homestead --dev,以便在当前项目的 composer.json 文件中需要 Homestead 助手并进行安装。

运行vagrant reload --provision,你应该准备好了。

【讨论】:

【参考方案10】:

在 Laravel 5 中,我必须通过 ssh 进入我的宅基地服务器并运行以下命令:

sudo chmod -R 777 storage
sudo chmod -R 777 bootstrap/cache

【讨论】:

【参考方案11】:

这是我的解决方案:

这是一个文件路径问题,所以下面是我的文件夹和站点路径。另外,我不得不使用“vagrant destroy”,因为配置不起作用。

【讨论】:

【参考方案12】:

这通常发生在您编辑 Homestead.yaml 文件时。

如果你像我一样尝试过homestead up --provision 并没有成功! 然后试试这个(它对我有用):

homestead destroy homestead up

【讨论】:

【参考方案13】:

我的问题出在域的配置文件中:

我的项目的公共文件夹是在 /home/vagrant/Code/demo/public 中创建的

域的配置文件(对我来说是/etc/nginx/sites-available/demo.app)配置为:“/home/vagrant/Code/Laravel/public”而不是“/home/vagrant/Code/演示/公开”。

现在它运行良好。

【讨论】:

【参考方案14】:

我在使用 Homestead 时遇到过类似的问题,只是配置盒子对我有用。所以你应该试试这个:

vagrant provision

【讨论】:

【参考方案15】:

我在关注 Laravel 文档 (https://laravel.com/docs/5.2/homestead) 时遇到了同样的问题

我的问题很简单,我错过了阅读文档中的这一部分:

Homestead.yaml 文件将被放置在 ~/.homestead 隐藏 目录:

所以我更新了错误的 Homestead.yaml 文件,因为当我运行 bash init.sh 命令时文件被移动了。

经过大量搜索我才意识到这一点,所以希望这会对某人有所帮助。

【讨论】:

【参考方案16】:

vagrant provision相关代码对我不起作用,经过一段时间后,我重新启动了整个系统。现在可以了... -,-"

【讨论】:

【参考方案17】:

我根据this laracast tutorial编辑了homestead.yamlhosts,并使用vagrant suspendvagrant halt等重新启动宅基地/vagrant up;我也尝试过vagrant provision,但no file specified 仅在我完成上述所有操作后重新启动计算机(我在Windows 7 PC 上)后才消失。这肯定是一个耗时且棘手的错误。

这就是我为 两个 laravel 项目工作的 homestead.yaml 的样子:

ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
- ~/.ssh/id_rsa

folders:
    - map: D:\Projects
      to: /home/vagrant/Projects

sites:
    - map: projectone.app
      to: /home/vagrant/Projects/ProjectOne/public
    - map: projecttwo.app
      to: /home/vagrant/Projects/ProjectTwo/public

databases:
    - laraveldb

这是我的hosts 文件:

...
127.0.0.1       localhost
192.168.10.10   projectone.app
192.168.10.10   projecttwo.app

注意,D:\Projects\ProjectOneD:\Projects\ProjectTwo 有两个单独的 laravel 安装

然后我在浏览器中输入projectone.app:8000 访问第一个项目,第二个项目输入projecttwo.app:8000

附:我在 Windows 上为 Laravel 5.2 测试了这个

【讨论】:

【参考方案18】:

我有同样的问题

但忘了规范说配置文件位于

~/.homestead/Homestead.yaml 并且正在更新 ~/Homestead/src/stubs/Homestead.yaml

所以修复是更新位于此处的 Homestead.yaml

~/.homestead/Homestead.yaml

之前

sites: - map: homestead.app to: /home/vagrant/Laravel/public

之后

sites: - map: homestead.app to: /home/vagrant/Code/mysitename/public

然后我跑了vagrant up --provision

希望这对其他人有用。

【讨论】:

【参考方案19】:

发生这种情况是因为您需要正确配置 nginx 服务器才能为您的应用程序提供服务。您可以按照本指南执行此操作,从主题 Configure Nginx and the Web Root 开始。

在您的 /etc/nginx/sites-available 和 /etc/nginx/sites-enabled 之间正确configuring your symbolic link 之后,您需要确保将根变量设置为应用程序的文件夹路径。从

设置您的 nginx 根目录
root /usr/share/nginx/html;

/home/vagrant/Projects/ProjectOne/public

此外,您必须将 index.php 放在 html 文件之前,以便在 html 之前提供 php。改变这个

index index.html index.htm;

到这里

index index.php index.html index.htm;

完成配置后,使用

重启你的 nginx 服务器
sudo service nginx restart

您的应用程序现在应该被提供。

【讨论】:

【参考方案20】:

对我来说,以下工作:

vagrant reload --provision

【讨论】:

在我将基本主机目录更改为 Code 而不是 webdesign 后,这对我也很有效,可以加载网站。谢谢! – rhand 刚刚编辑 这也可能是Homestead.yaml文件中的小写或大写问题。例如,我映射到/phpmyadmin,而我的目录名称实际上是phpMyAdmin 我使用此解决方案的原因是它可以使我的数据库数据保持完整。此处更详细地描述了此解决方案:laracasts.com/discuss/channels/general-discussion/…【参考方案21】:

旧版本的 Homestead 映射 ~/Code 中的文件夹,例如默认为 ~/Code/laravel/public。注意~/Code 中的大小写。这些是区分大小写的。新版本使用小写~/code。根据您的实际目录更新Homestead.yaml 中的这些目录。

TL;DR;

根据您的实际目录名称将~/Code 更新为~/code 或反之亦然。

【讨论】:

【参考方案22】:

重命名一些目录后,我不得不销毁并重新运行 vagrant。这里的解决方案都不起作用。

这对我有用:

vagrant destroy
vagrant up

【讨论】:

不要用户 vagrant 销毁,使用 vagrant halt 优雅地关闭你的虚拟机。【参考方案23】:

我只是在同样的情况下挣扎。以下解决了这个问题:

如果你有这样的目录结构:

folders:
    - map: /Users/me/code/exampleproject
      to: /home/vagrant/code/exampleproject

只需在主机上的 exampleproject 中创建“public”文件夹即可。

【讨论】:

为我修好了【参考方案24】:

我使用的是 Windows 10 并具有以下 Homestead 配置

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa
folders:
    - map: ~/code               #folder in local computer where codes are stored eg, c:\xampp\htdocs\project1
      to: /home/vagrant/code    #folder in the VM where the above code will be mapped

sites:
    - map: homestead.local          #fake name of the site (redirect this domain to the above IP ie 192.168.10.10 in hosts file ie, c:\windows\system32\etc\hosts)
      to: /home/vagrant/code/public #complete path to index.php file in the local computer to be utilized by homestead.local 
databases:
    - homestead

PING访问了 homestead.local 域并获得了结果。

但是当我在浏览器中输入http://homestead.local时,我得到了'没有指定输入文件'错误

我检查了代码/公共文件夹,没有索引文件。我确信系统正在寻找不知何故丢失的默认文件。

一旦我创建了一个索引文件,它就可以正常工作了。

更新:

下次在 Homestead.yaml 文件发生更改后发生这种情况时,我运行了vagrant reload --provision 命令并且它起作用了。

看起来只运行 vagrant reload 不会配置 vagrant box。 Read here

【讨论】:

【参考方案25】:

对我来说同样的问题。

vagrant provisionhomestead up --provision 都没有为我工作,但下面的工作 - 可能是因为当我修改 yml 文件时宅基地已经在运行

vagrant reload --provision

【讨论】:

【参考方案26】:

我有这样的问题。我查看了 Homestead.yaml 文件,所有文件和所有设置都是正确的。在执行以下步骤后,我的问题就解决了。

1-如果你在 vagrant@homestead:~$ 命令行,输入exit 命令。

2- 现在您必须在 Homestead 文件夹中。运行这个命令

vagrant reload --provision

3-运行vagrant ssh

现在,如果您在浏览器中输入相关地址,它应该会显示 Laravel 页面。

【讨论】:

【参考方案27】:

尝试重新启动计算机

有一个正在本地运行的 Homestead,它在某个时候停止并会出现“未指定输入文件”错误。我无法追踪它。

重启电脑后,错误消失了。

【讨论】:

【参考方案28】:

如果您重命名了包含您的 Homestead 项目的文件夹,您将收到此错误。访问您的 Homestead.yaml 文件并更新所有引用以指向重命名的文件夹,然后再次执行 vagrant up (等)

【讨论】:

【参考方案29】:

如果您使用新版本的 larval 7 >= 您可以从您的 hometed 目录中使用 vagrant provision

【讨论】:

【参考方案30】:

只有在我没有正确创建目录的情况下执行新安装时才会发生此错误,例如“正确”:C:\Users\userxyz\Code\public

尝试删除“public”目录,显示错误“没有指定输入文件”

Homestead.yaml

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      #type: "nfs"

sites:
    - map: homestead.test
      to: /home/vagrant/Code/public

【讨论】:

以上是关于使用 Laravel Homestead:'没有指定输入文件'的主要内容,如果未能解决你的问题,请参考以下文章

为啥 laravel homestead 没有运行 Apache

Laravel Homestead Box 0.4.2使用php5.6而不是php7

Laravel [1045] Access denied for user 'homestead'@'localhost' .env没有配置

Vagrant Share - Laravel Homestead,Ubuntu

有没有人让 memcached 在 Laravel Homestead php7 盒子上工作?

有没有人让 memcached 在 Laravel Homestead php7 盒子上工作?