Laravel перемещает проект с сервера Ubuntu на локальный XAMPP

У меня есть проект Laravel, который я скопировал со своего сервера Ubuntu, и теперь я пытаюсь запустить его на своей локальной машине (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, все та же ошибка ..... что я делаю не так?

Это был кошмар.

Можете ли вы поделиться более подробной информацией о том, в какой системе вы пробуете ее Windows или Mac?

Ashfaque Ali Solangi 08.12.2018 01:03

Это на Mac.

user979331 08.12.2018 02:17

Используйте Laravel Valet. XAMPP - отстой TBH.

Paras 08.12.2018 08:44

Попробуйте удалить папку vendor, затем запустите composer install

Ibrahim Mohamed 08.12.2018 09:21

проверьте Illuminate\View\ViewServiceProvider::class, в confi/app.php

Dhruv Raval 08.12.2018 10:42

php artisan config: ясно, попробуйте. также не забывайте, что вам нужно получить доступ к общей папке корневой папки laravel

punk73 08.12.2018 12:55

попробуйте php artisan view:clear

Hamelraj 08.12.2018 13:37

Не могли бы вы поделиться настройками конфигурации XAMP?

Sven Hakvoort 08.12.2018 20:18

@IbrahimShendy Я удалил папку vendor и установил композитор, теперь я получаю эту ошибку: The bootstrap/cache directory must be present and writable. Затем я сделал sudo chmod -R 777 bootstrap и получил ту же ошибку обратно View [welcome] not found

user979331 08.12.2018 21:44

@ user979331 ну это уже другая ошибка. Как насчет изменения разрешений каталога просмотра? resources/view/, может быть, и resources

Ibrahim Mohamed 09.12.2018 03:34

Я пробовал это, не сработало

user979331 09.12.2018 06:15

@ user979331 Попробуйте: php artisan config:clear. Также, если это не сработало, попробуйте следующее: php artisan cache:clear, php artisan config:cache. Это может решить эту проблему.

Ibrahim Mohamed 09.12.2018 09:13

запустить composer dumpautoload

Flash 09.12.2018 14:26

@ user979331: Вы проверили содержимое ваших storage/framework/cache/data и storage/framework/view, чтобы узнать, действительно ли они очищаются вашими ремесленными командами?

Peter 10.12.2018 22:02

@ user979331 Привет, можешь связаться со мной здесь и поделиться со мной проектом

Rafay Hassan 14.12.2018 09:43

Какую версию Laravel вы используете? 5.3? 5.6? 5.3 Полагаю. Каждая новая версия более точно вылавливает конкретные ошибки. Также убедитесь, что в вашем файле .env нет значения с пробелом, и убедитесь, что в файле config/app.php нет пропущенной запятой. Это может быть создано по многим причинам. Отметьте этот Решение проблем на Github, чтобы увидеть больше причин.

KeitelDOG 14.12.2018 18:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
16
2 780
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

Ответ принят как подходящий

В прошлый раз я проверил, что Laravel работает не на XAMPP, а на PHP, установленном при установке XAMPP, поэтому проект можно сохранить где угодно на компьютере.

Учитывая это, вам нужно будет просто иметь активную установку PHP, а затем вы скопируете только соответствующие файлы проекта на новый компьютер (те файлы, которые вы получите, когда разместите свой проект на GitHub). У него нет проблем с кешем, все, что вам нужно сделать после этого, - это

php artisan key:generate

затем composer install или composer update, чтобы получить пакеты поставщика из Интернета

Мои деньги сейчас идут на выбор соответствующих файлов и переустановку с ними. По моей собственной установке при смене компьютера это список, который вам придется скопировать

chmod -R 777 storage/

Если у вас есть другой пользователь для apache2 (обычно www-data), также выполните:

chown -R www-data storage/

Вы также можете проверить, работает ли он со встроенным сервером:

php artisan serve

Я получил эту ошибку: chown: www-data: недопустимое имя пользователя

user979331 10.12.2018 19:11

никогда не используйте 777, это крайне плохая практика.

Ray A 12.12.2018 15:56

@RayA Я знаю. Он только пытается запустить приложение локально, поэтому наличие папки 777 на локальном хосте не имеет большого значения. Вместо того, чтобы просто сказать «это плохая практика», вы могли бы на самом деле расширить и объяснить OP, почему это плохая практика. Потому что кажется, что вы просто набираете ответ, в котором написано «777», и копируете / вставляете свой «плохой опыт» для некоторых голосов.

eselskas 14.12.2018 11:49

@eselskas, я могу понять ваше разочарование тем, что я сказал, что это плохая практика, и, насколько вам известно, я не копировал / вставлял его, но ради помощи, вот почему разрешение 777 означает, что каждый пользователь может доступ, запись, удаление, обновление файлов, содержащихся в этом каталоге, без проблем, если злонамеренные пользователи получают доступ к этому файлу, он / она может загружать любые файлы и запускать их, что поставит под угрозу безопасность сервера.

Ray A 14.12.2018 15:28

Вы можете создать файл .htaccess и добавить данные ниже в файл .htaccess.

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

После создания файла .htaccess установите корневой путь laravel в терминале и запустите команду ниже в терминале

php artisan serve

Поскольку ваш Apache уже обслуживает, у вас есть только проблемы с разрешением. А поскольку вы используете Mac, имя пользователя и группа по умолчанию в Apache conf - _www для Mac, а не 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 или веб-серверу, например Nginx, какое разрешение назначить вновь созданному каталогу или файлы для пользователя _www. По умолчанию Apache umask - это 0002, что дает 0775 для каталога и 0664 для нового файла. Если когда-либо значение umask было изменено на 0022, как это используется по умолчанию в Nginx, то эквивалентных разрешений 0755 или 0644 будет недостаточно для вашей группы Apache _www для записи в каталоги с группой _www. Таким образом, вы можете сменить umask на 0002 или сменить владельца на _www:

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

Так что это зависит от ваших конфигов.

Я столкнулся с той же проблемой, что и вы, но не переходил с ubuntu на mac, это был с windows на linux, я был в полном беспорядке, но меня спас только git, он может причинить вам немного боли, но он идет чтобы спасти тебя в будущем. Вот шаги, которые вам нужно сделать.

  1. Создайте пустой репозиторий на Mac, используя эту команду git init --bare.
  2. Клонируйте репозиторий в ubuntu с помощью git clone.
  3. Скопируйте свой код laravel в клон, созданный на шаге 2.
  4. Отправьте файлы с ubuntu на MAC.
  5. Протестируйте проект.

Каталог, который вы создадите в Mac, может находиться внутри htdocs файла xammp. Я знаю, что это может оказаться болезненной задачей, но оно того стоит.

Источники для получения дополнительной информации: git-scmПолучение Git на сервере

Если вам понадобится дополнительная помощь, я буду более чем счастлив обсудить это с вами.

Перейдите в папку своего проекта и добавьте эти команды с терминала.

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:generate и composer install

Никогда не используйте КОГДА-ЛИБО chmod 777, это серьезное нарушение безопасности

Amaury 14.12.2018 17:12

@Amaury для чтения / записи в хранилище и папке кеша необходимо дать разрешение 777. есть другой способ?

Dhaval 19.12.2018 05:10

Для всех папок в хранилище / вам необходимо установить владельца для вашего пользователя apache, а затем дать этому пользователю (а не кому-либо) права на запись в файлы, например: 644. Подробнее см. мой ответ

Amaury 19.12.2018 14:55

Примечание: следующее работает для Laravel 5.x, но также и для 4.2, не тестировалось с другими версиями.

Почему бы не использовать Git? (Если вы не знакомы с ним, взгляните на официальный сайт, в Интернете также есть множество руководств)

Обычно копирование и вставка целых проектов - не лучшая идея из-за некоторых прав доступа к файлам / каталогам и других не очень хороших вещей.

Вот что я сделал, чтобы переместить свой проект из Windows на свой сервер Ubuntu:

  • Поместите свой проект в репозиторий git (GitHub, GitLab или что-то еще), файлы .gitignore, предоставляемые с приложениями Laravel, в большинстве случаев достаточно хороши
  • На новом компьютере клонируйте свой репозиторий
  • Сделать

    composer dump-autoload
    composer install
    
  • Чтобы перенести свою базу данных, выполните

    php artisan migrate
    

    и если у вас есть посев, сделайте это

    php artisan db:seed
    

Затем, если у вас есть проблемы с разрешениями файлов / папок, не выполняйте КОГДА-ЛИБОchmod -R 777 path/, если вам нужно сделать это для решения вашей проблемы, вы делаете что-то не так. Эта команда предоставляет всем права доступа ко всем файлам и папкам в папке path.

В вашем случае вам необходимо сделать следующее:

  • Сначала найдите, какое имя пользователя использует apache для запуска сервера (обычно это www-данные).

    ps aux | egrep '(apache|httpd)'
    
  • Затем измените владельца каталога проекта на пользователя apache (пример для пользователя apache www-data)

    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.

Для меня (при разработке на xampp, что я делаю для всех своих проектов) - я бы не рекомендовал помещать ваши материалы в папку htdocs. Laravel ожидает, что он не будет размещен в субфодлере, например. (локальный / мой-проект). Поэтому вам следует настроить виртуальный хост, чтобы он работал легко (например, my-project.test), что немного раздражает.

Простое решение - использовать команду php artisan serve, чтобы просто настроить локальный сервер на порт 8000.

Не забудьте запустить xampp для сервера mysql.

Уже были упомянуты некоторые типичные советы:

  • удалите папку vendor и запустите composer install (установите композитор, если еще не сделали)
  • запустить composer dump-autoload
  • запустить php artisan key:generate
  • конечно, не забывайте миграцию php artisan migrate
  • и очистите полный кеш php artisan cache:clear

Обычно вам не нужно устанавливать какие-либо права доступа к файлам afaik

Я просто попытался воспроизвести вашу проблему на своем Mac. Итак, я установил XAMPP с версией PHP 7.1.25, которая является эквивалентной версией моей локальной версии PHP.

Итак, я установил XAMPP и запустил сервер.

Загрузил мою папку проекта laravel с моего сервера ubuntu и скопировал ее в htdocs (XAMPP)

Когда я пытался запустить http: // локальный / мойпроект / общедоступный, он показывает исключение, например

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

Затем я дал полное разрешение на папку хранилища

chmod -R 777 storage

И сменил владельца для файлов в папке myproject.

Здесь я только что проверил право собственности на каталог приборная доска, который работает отлично и с учетом то же право собственности пользователя каталога 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 может работать, но пожалуйста не использует его или не использует и как можно скорее измените разрешения, чтобы никто не мог полностью контролировать файлы и папки.
Amaury 14.12.2018 17:16

Поскольку OP ищет решение, я думаю, он может использовать 777 для всего каталога проекта. Затем, если это действительно проблема с разрешением, он вернется к безопасному разрешению.

KeitelDOG 14.12.2018 21:04

Я думаю, что разговор о 777 бессмыслен, как сказал @KeitelDOG. и, кроме того, OP пытается переместить его в xampp, что никогда не рекомендуется для производства

Shobi 15.12.2018 18:27

@Shobi см. Мой ответ ниже, и вы увидите безопасный способ установки владельца, группы, чтения и записи для них с помощью 774 или 664, _www для apache Mac, настройки umask и т. д. Я использовал правильные разрешения для файлов более 5 лет сейчас. Но поскольку он находится в среде разработки, он может просто временно перейти к 777, чтобы убедиться, что его проблема не связана с правами доступа к файлу. И, кстати, он переносит его на Local Mac, так что производство здесь вообще не применяется.

KeitelDOG 15.12.2018 22:35

когда пользователь / группа www-data неизвестны; в большинстве дистрибутивов Linux используется apache:

chown -R apache:apache dirname

в то время как на OSX это будет пользователь / группа _www:

chown -R _www:_www dirname

Добавление текущего пользователя в группу _www может в целом облегчить жизнь.

Чтобы изолировать ваши проблемы:

  1. Загрузите свой код в репозиторий (битбакет или гитхаб)
  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 dump-autoload
php artisan cache:clear
php artisan view:clear
php artisan route:clear

теперь попробуйте запустить проект, если проблема все еще существует, вам нужно проверить config/app.php, если он содержит Illuminate\View\ViewServiceProvider::class поставщик услуг просмотра.

если его там нет, добавь это

Другие вопросы по теме