Laravel 将项目从 Ubuntu 服务器移动到本地 XAMPP

Laravel move project from Ubuntu Server to Local XAMPP

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

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

View [welcome] not found

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

The bootstrap/cache directory must be present and writable

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

Class view does not exist

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

Class view does not exist

然后我试了composer update还是一样的错误.....我做错了什么?

这是一场噩梦。

上次我检查 Laravel 没有 运行 在 XAMPP 上,而是在安装 XAMPP 时安装的 PHP 上,所以项目可以保存在任何地方在电脑上。

考虑到这一点,您只需要激活 PHP 安装,然后只将项目的相关文件复制到新计算机上(这些文件将在您推送时获得您的项目到 GitHub)。它没有缓存问题,之后你需要做的就是

php artisan key:generate

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

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

chmod -R 777 storage/

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

chown -R www-data storage/

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

php artisan serve

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

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

创建 .htaccess 文件后,在终端中设置 laravel 根路径,并在终端

的命令下方设置 运行
php artisan serve

由于您的 Apache 已经在运行,所以您只是遇到了权限问题。由于您使用的是 Mac,Apache conf 中的默认用户名和组是 Mac 的 _www 而不是 Ubuntu 的 www-data。您可以在 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(或者在你的应用程序环境逻辑的某些情况下,用户也有访问权限(读和写)到:

包含资产的所有 public 目录和子目录。

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

此处指定的存储目录和子目录(storage/framework -> 所有,storage/logs -> 所有,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 或 Nginx 等 Web 服务器为用户 _www 分配给新创建的目录或文件的权限。默认情况下,Apache umask0002,它为目录提供 0775,为新文件提供 0664。如果 umask 值被更改为 0022 就像它是 Nginx 中的默认值一样,那么等效的权限 07550644 将不足以满足您的 Apache 组 _www 写入具有组 _www 的目录。因此,您可以将 umask 更改为 0002 或将所有者更改为 _www :

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

所以这取决于您的配置。

我运行遇到了和你一样的问题,但不是从ubuntu移动到mac,而是从windows移动到linux,我乱七八糟的,只有git救了我,可能让你痛了点,但以后会救你的。 以下是您需要执行的步骤。

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

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

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

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

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

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

注意:以下适用于 Laravel 5.x 但也适用于 4.2,未与其他版本一起测试

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

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

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

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

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

    php artisan migrate
    

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

    php artisan db:seed
    

然后,如果您对 file/folder 权限有疑问,请不要 EVER 执行 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 {} \;
    
  • 要修复 bootstrap/cache 和存储/权限问题,请执行

    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

对我来说(在 xampp 上开发时,我为所有项目所做的工作)- 我不建议将您的东西放在 htdocs 文件夹中。 Laravel 预计不会托管在 subfodler 上,例如(localhost/my-project)。所以你应该设置一个虚拟主机以使其更容易工作(例如 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

我刚刚试图在我的 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 目录的所有权,它是 运行ning 完美的,并给出了 相同的用户所有权 我的项目目录。

chown -R root:admin .  

然后执行以下命令

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

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

Class view does not exist

可能是目录的所有权问题

当 user/group www-data 未知时;大多数 Linux 发行版使用 apache:

chown -R apache:apache dirname

OSX 上,这将是 user/group _www:

chown -R _www:_www dirname

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

隔离您的问题:

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

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

一切正常后,切换到 xampp。

首先:

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.

Please vote up if you found this answer useful.

我认为如果您从 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 查看服务提供商。

如果没有,请添加