【问题标题】:Laravel move project from Ubuntu Server to Local XAMPPLaravel 将项目从 Ubuntu 服务器迁移到本地 XAMPP
【发布时间】:2019-05-07 12:42:52
【问题描述】:

我有一个从我的 Ubuntu 服务器复制的 Laravel 项目,现在我正试图在我的本地机器上运行它(Mac 上的 XAMPP)我已经为此苦苦挣扎了几天,我觉得我快疯了.

当我将项目粘贴到 XAMPP htdocs 文件夹中时,出现此错误:

查看 [欢迎] 未找到

哪个php artisan cache:clear 让它消失了,然后我得到这个错误:

bootstrap/cache 目录必须存在且可写

然后我这样做,php artisan cache:clear 这给了我一个新错误:

类视图不存在

然后无论我在终端中做什么或查看网络浏览器,我总是得到错误

类视图不存在

然后我尝试了composer update 仍然是同样的错误.....我做错了什么?

这是一场噩梦。

【问题讨论】:

  • 你能分享更多关于你正在尝试哪个系统的 windows 或 mac 的详细信息吗?
  • 这是在 Mac 上。
  • 使用 Laravel 代客。 XAMPP 糟透了 TBH。
  • 尝试删除vendor文件夹然后运行composer install
  • 检查Illuminate\View\ViewServiceProvider::class, in confi/app.php

标签: php laravel laravel-5 xampp


【解决方案1】:

上次我检查 Laravel 没有在 XAMPP 上运行,而是在安装 XAMPP 时安装的 PHP 上运行,因此项目可以保存在计算机上的任何位置。

鉴于这一事实,您只需要安装一个活动的 PHP,然后您只需将项目的相关文件复制到新计算机上(当您将项目推送到 GitHub 时,您将获得这些文件)。它没有缓存问题,那么您之后需要做的就是

php artisan key:generate

然后composer installcomposer update 从网上获取供应商包

我现在的钱是挑选相关文件并重新安装它们 根据我自己在更换计算机时的安装,这是您必须复制的列表

【讨论】:

    【解决方案2】:

    chmod -R 777 storage/

    如果您有不同的 apache2 用户(通常是 www-data),也可以这样做:

    chown -R www-data storage/

    您还可以检查它是否与内置服务器一起运行:

    php artisan serve

    【讨论】:

    • 我收到这个错误:chown: www-data: 非法用户名
    • 永远不要使用 777,这是非常糟糕的做法。
    • @RayA 我知道。他只是想让应用程序在本地运行,因此在 localhost 上有一个 777 文件夹并不是什么大问题。您实际上可以扩展并向 OP 解释为什么这是不好的做法,而不仅仅是说“它的坏做法”。因为您似乎只是 grep 回答说“777”并复制/粘贴您的“不良做法”评论以获得一些支持
    • @eselskas,我可以理解您的沮丧,因为我说这是一种不好的做法,而且据您所知,我没有复制/粘贴它,但为了提供帮助,这就是原因, 777权限意味着每个用户都可以毫无问题地访问,写入,删除,更新该目录中包含的文件,如果恶意用户访问该文件,则他/她可以上传任何文件并运行它们,这将危及服务器安全。
    【解决方案3】:

    您可以创建 .htaccess 文件并将以下数据添加到 .htaccess 文件中

    <IfModule mod_rewrite.c>
     RewriteEngine on
     RewriteCond %{REQUEST_URI} !^public
     RewriteRule ^(.*)$ public/$1 [L]
    </IfModule>
    

    创建 .htaccess 文件后,在终端设置 laravel 根路径并在终端中运行以下命令

    php artisan serve
    

    【讨论】:

      【解决方案4】:

      由于您的 Apache 已经在服务,因此您只有权限问题。由于您使用的是 Mac,Apache conf 中的默认用户名和组对于 Mac 是 _www 而不是 www-data 对于 Ubuntu。您可以在httpd.conf 文件中看到它:

      <IfModule unixd_module>
      #
      # If you wish httpd to run as a different user or group, you must run
      # httpd as root initially and it will switch.  
      #
      # User/Group: The name (or #number) of the user/group to run httpd as.
      # It is usually good practice to create a dedicated user and group for
      # running httpd, as with most system services.
      #
      User _www
      Group _www
      
      </IfModule>
      

      现在,使用终端,进入您的项目目录,比如说cd /var/www/laravel-project1,并确保组_www(或者在您的应用程序环境逻辑的某些情况下,用户也可以访问(读取和写入):

      所有包含资产的公共目录和子目录(如果有的话)。

      sudo chgrp -R _www public
      sudo chmod -R 774 public
      

      此处指定的存储目录和子目录(storage/framework -> all、storage/logs -> all、storage/app -> public 仅限目录),以及 bootstrap/cache 目录和文件

      sudo chgrp -R _www storage/framework storage/logs storage/app/public bootstrap/cache
      sudo chmod -R 774 storage/framework storage/logs storage/app/public bootstrap/cache
      

      这应该可以解决您访问页面的所有权限问题。

      但是现在如果在使用创建的页面、会话和日志文件时遇到其他问题,可能还有最后一个权限问题,称为UMask,它告诉 Apache 或 Web 服务器(如 Nginx)分配什么权限到用户_www 新创建的目录或文件。默认情况下,Apache umask0002,它为目录提供 0775,为新文件提供 0664。如果曾经 umask 值更改为 0022 就像它是 Nginx 中的默认值一样,那么等效权限 07550644 将不足以让您的 Apache 组 _www 写入具有组 @ 的目录987654344@。因此,您可以将 umask 更改为 0002 或将所有者更改为 _www

      sudo chown -R _www public storage/framework storage/logs storage/app/public
      

      所以这取决于你的配置。

      【讨论】:

        【解决方案5】:

        我遇到了和你一样的问题,但是没有从ubuntu转到mac,是从windows到linux,我一团糟,但只有git救了我,它可能会给你一点痛苦,但是它会在未来拯救你。 以下是您需要执行的步骤。

        1. 使用此命令git init --bare 在 Mac 上创建空存储库。
        2. 使用 git clone 将存储库克隆到 ubuntu。
        3. 将您的 laravel 代码复制到您在第 2 步中创建的克隆中。
        4. 将文件从 ubuntu 推送到 MAC。
        5. 测试项目。

        您将在 mac 中创建的目录,它可以在 xammp 的 htdocs 中。 我知道这可能是一项痛苦的任务,但这是非常值得的。

        更多信息来源: git-scm Getting Git on Server

        如果您需要更多帮助,我很乐意与您讨论。

        【讨论】:

          【解决方案6】:

          转到您的项目文件夹添加从终端运行这些命令

          sudo chmod -R 777 your_projrct/storage

          sudo chmod -R 777 your_projrct/bootstrap/cache

          sudo chown -R :www-data your_project

          sudo chmod -R g+s your_project

          然后是 php artisan key:generatecomposer install

          【讨论】:

          • 永远不要永远使用 chmod 777,这是一个巨大的安全漏洞
          • @Amaury 用于读取/写入存储和缓存文件夹需要授予 777 权限。还有什么办法吗?
          • 对于 storage/ 中的所有文件夹,您需要将所有者设置为您的 apache 用户,然后授予该用户(而不是任何人)对文件的写入权限,即:644。有关详细信息,请参阅my answer
          【解决方案7】:

          注意:以下适用于 Laravel 5.x 和 4.2,未在其他版本中测试

          为什么不使用 Git? (不熟悉的可以看看the official website,网上也有很多教程)

          通常,复制粘贴整个项目并不是一个好主意,因为一些文件/目录权限和其他不太好的东西。

          这就是我将我的项目从 Windows 移动到我的 Ubuntu 服务器的方法:

          • 将您的项目放在 git 存储库(GitHub、GitLab 或其他)上,Laravel 应用程序提供的 .gitignore 文件在大多数情况下已经足够好了
          • 在您的新机器上,克隆您的存储库
          • 做一个

            composer dump-autoload
            composer install
            
          • 要迁移您的数据库,请执行

            php artisan migrate
            

            如果您有播种,请执行此操作

            php artisan db:seed
            

          然后,如果您在文件/文件夹权限方面遇到问题,请不要永远发送chmod -R 777 path/,如果您必须这样做来解决您的问题,那么您做错了。 此命令授予任何人对 path 文件夹中所有文件和文件夹的所有权限。

          在您的情况下,您必须执行以下操作:

          • 首先,找到apache用来运行服务器的用户名(通常是www-data)

            ps aux | egrep '(apache|httpd)'
            
          • 然后,将项目目录所有者更改为 apache 的用户(以 www-data apache 用户为例)

            sudo chown -R www-data:www-data /var/htdocs/your-project/
            
          • 设置文件夹权限

            sudo find /var/htdocs/your-project/ -type d -exec chmod 755 {} \;
            
          • 设置文件权限

            sudo find /var/htdocs/your-project/ -type f -exec chmod 644 {} \;
            
          • 要修复引导/缓存和存储/权限问题,请执行

            sudo chown -R www-data:www-data /var/htdocs/your-project/
            

          Laravel 5.x

              sudo chmod -R ug+rwx /var/htdocs/your-project/storage /var/htdocs/your-project/bootstrap/cache
          

          Laravel 4.2

              sudo chmod -R ug+rwx /var/htdocs/your-project/storage /var/htdocs/your-project/app/bootstrap/cache
          

          那么,你应该很好。

          这样做,您可以轻松地将项目从一台机器移动到另一台机器,而无需为权限修复或任何事情而苦恼。

          文件和文件夹权限命令行说明的更多信息和来源,请参阅Laravel 5 Files Folders Permission and Ownership Setup

          【讨论】:

            【解决方案8】:

            对我来说(在 xampp 上开发时,我为所有项目所做的工作)- 我不建议将您的东西放在 htdocs 文件夹中。 Laravel 不希望托管在子文件夹上,例如(本地主机/我的项目)。因此,您应该设置一个虚拟主机以使其轻松工作(例如 my-project.test),这有点烦人。

            简单的解决方案是使用php artisan serve 命令在端口 8000 上简单地设置本地服务器。

            不要忘记为 mysql 服务器启动 xampp。

            已经提到了一些典型的技巧:

            • 删除供应商文件夹并运行composer install(如果您还没有安装composer)
            • 运行composer dump-autoload
            • 运行php artisan key:generate
            • 当然不要忘记迁移php artisan migrate
            • 并清除您的完整缓存php artisan cache:clear

            通常你不需要设置任何文件权限 afaik

            【讨论】:

              【解决方案9】:

              我刚刚尝试在我的 Mac 上重现您的问题。所以我安装了 XAMPP 和 PHP 版本 7.1.25,这是我本地 PHP 版本的等效版本

              所以我安装了 XAMPP 并启动了服务器。

              从我的 ubuntu 服务器下载我的 laravel 项目文件夹并将其复制到 htdocs (XAMPP)

              当我尝试运行 http://localhost/myproject/public 时,它会显示异常

              There is no existing directory at "/Applications/XAMPP/xamppfiles/htdocs/myproject/storage/logs" and its not buildable: Permission denied
              

              然后我授予了存储文件夹的完全权限

              chmod -R 777 storage
              

              并更改了 myproject 文件夹中文件的所有权。

              在这里,我刚刚检查了 dashboard 目录的所有权,该目录运行良好,并赋予 myproject 目录相同的用户所有权

              chown -R root:admin .  
              

              接下来的命令

              composer install
              php artisan cache:clear
              php artisan view:clear
              php artisan route:clear
              

              在此之后我的 laravel 代码运行完美。

              Class view does not exist
              

              可能是目录的所有权问题

              【讨论】:

              • chmod 777 可能有效,但不要使用它,或者使用它并尽快更改权限,这样任何人都无法完全控制文件和文件夹
              • 由于 OP 正在寻找解决方案,我认为他可以将 777 用于所有项目目录。那么如果真的是权限问题,他会改回安全权限
              • 我认为 777 的谈话毫无意义,正如@KeitelDOG 所说。此外,OP 正试图将其移至 xampp,这从不推荐用于生产
              • @Shobi 请在下面查看我的答案,您将看到使用774664_www 为Apache Mac 和@987654332 设置所有者、组、读取和写入的安全方法@ 设置等。我已经使用适当的文件权限超过 5 年了。但是由于他在开发环境中,他可以暂时传递给777,以确保他的问题与文件权限无关。顺便说一句,他正在将其转移到本地 Mac,因此这里根本不适用生产。
              【解决方案10】:

              当用户/组www-data 未知时;大多数 Linux 发行版使用apache

              chown -R apache:apache dirname
              

              OSX 上,这将是用户/组_www

              chown -R _www:_www dirname
              

              一般来说,将当前用户添加到_www 组可能会让生活更轻松。

              【讨论】:

                【解决方案11】:

                隔离您的问题:

                1. 将您的代码放入存储库(bitbucket 或 github)
                2. 将存储库克隆到您的本地环境中
                3. 运行composer install
                4. 运行php artisan serve。这样您就可以排除 xampp 的问题。
                5. 在浏览器中转到localhost:8000

                如果您的本地机器(包括供应商文件夹)中已经有您的整个代码库,那么请跳过第 1 步和第 2 步。第 3 步不会有什么坏处,但您也可以跳过它。

                一切正常后,切换到 xampp。

                【讨论】:

                  【解决方案12】:

                  首先:

                  composer update
                  composer dumpautoload
                  php artisan cache:clear
                  

                  然后只需配置一个虚拟主机

                  1。为您的应用创建本地域

                  编辑hosts 文件并将所有请求从您的域重定向到127.0.0.1

                  127.0.0.1   lara.vel
                  

                  2。配置虚拟主机

                  编辑\xampp\apache\conf\extra\httpd-vhosts.conf:

                  <VirtualHost lara.vel:80>
                    DocumentRoot "C:\xampp\htdocs\laravel\public"
                    ServerAdmin laravel.dev
                    <Directory "C:\xampp\htdocs\laravel">
                          Options Indexes FollowSymLinks
                          AllowOverride All
                          Require all granted
                    </Directory>
                  </VirtualHost>
                  

                  完成!在浏览器中打开您的域,您将在那里看到您的项目!


                  另一种方法很简单,只需运行artisan serve

                  如果您觉得这个答案有用,请投票。

                  【讨论】:

                    【解决方案13】:

                    我认为如果您从 Ubuntu 复制项目,那么这是一个权限问题。

                    首先在你的 Mac 机器上通过在终端中输入来获取用户

                    users
                    

                    然后复制您刚刚获得的用户(例如用户名)并在此命令中使用它

                    sudo chown -R username project-directory
                    

                    然后检查yourproject-directory/bootstrap/cache,如果它不存在,就去创建它。否则运行此命令:

                    sudo chmod -R guo+w project-directory/bootstrap/cache
                    

                    然后

                    sudo chmod -R guo+w project-directory/storage
                    

                    然后使用 artisan 命令清除 composer 自动加载和缓存和配置

                    composer dump-autoload
                    php artisan cache:clear
                    php artisan view:clear
                    php artisan route:clear
                    

                    如果问题仍然存在,现在尝试运行项目, 你需要检查config/app.php是否包含Illuminate\View\ViewServiceProvider::class 查看服务提供者。

                    如果不存在,则添加它

                    【讨论】:

                      猜你喜欢
                      • 2016-02-02
                      • 2017-02-10
                      • 2018-07-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-11-11
                      • 2014-09-20
                      相关资源
                      最近更新 更多