Closed mamontov-cpp closed 7 years ago
Я разрабатываю под OpenServer`ом, на апаче. Нужно просто DocumentRoot в путь до public указывать. И все работает.
Укажите настройки в wiki. Желательно, чтобы была возможность настроить это через .htaccess.
Добавить .htaccess в корень проекта
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Но этот способ не рекомендуется. Если на хостинге DocumentRoot установлен в public_html, то можно папку public переименовать в папку public_html и в файле public_html/index.php добавить следующие строки
$app->bind('path.public', function() {
return __DIR__;
});
Ок, спасибо. Проверю, но уже завтра.
А попробуйте на хосте ставить его не в DocumentRoot (так проекты ставят далеко не всегда), а в какую-то папку, например DocumentRoot/grammar_review_tool. Думаю, что в таком случае RewriteRule должен быть другим.
По-моему нужны правки наподобие https://laravel.io/forum/03-08-2016-laravel-5-installation-in-subdirectory .
Нашел, где проблема. У вас для вывода ассета на странице логина в режиме local используетсся hmr_asset, которая подчистую игнорирует результаты npm run build, которая строит объединенные ассеты. Вообще эта функция странная, у меня вообще выходит что она никогда не будет работать правильно с npm run build (как понимаю, скорее всего потому что для разработки используется другая команда).
Соответственно, у вас и неправильно выходит. Нужно в wiki сказать, что при инсталляции переменную APP_ENV нужно переключить в production - тогда пути к ассетам выводятся верно.
Сейчас посмотрю, что с .htaccess.
А в вики это было указано. 4 пункт
set APP_ENV=production in .env file
И вот в этом комменте писал, откуда что берется. https://github.com/melihovv/grammar_review_tool/issues/103#issuecomment-275771641
А, ок, понятно. Теперь остается только решить проблему с путями до ассетов - там пока почему-то папка на которой они находятся не указывается, хотя в APP_URL все прописано верно.
А я нигде не писал, что APP_URL нужно менять. Можете прислать скриншот с панели network в браузере? Или словами описать: на какой адрес делается запрос и какой приходит ответ? И в каком окружении вы все это делаете: local or production?
Удивительно, но если обернуть вызовы elixir() в asset(), как советуют в https://github.com/laravel/framework/issues/7304, то проблема исчезает. Пути конкатенируются верно и все подгружается.
Да суть не важна - по сути у меня приложение в папке (доступ к верхней закрыт через .htaccess).
Кстати, текст к .htaccess в /public должен быть другим:
Allow from all
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteBase /тут папка, где лежит приложение/
RewriteRule "^(.*)$" index.php [L]
</IfModule>
Иначе статические ассеты отдаваться не будут.
Ок. elixir берет пути из файла assets/rev-manifest.json, если что.
Да, спасибо, я видел. Но он берёт относительные пути относительно корня приложения. Для получения абсолютных, нужен asset().
Не подскажете, откуда генерируется файл? Это страница авторизации в /storage/framework/views/ Непонятно из чего она генерируется.
Нашел сам. Нужно подправить resources/views/layouts/app.blade.php.
Прикрепляю правку. Протестите, пожалуйста у себя. У меня-то оно работает, но у вас все же другая конфигурация. Хотелось бы универсальное решение.
https://gist.github.com/mamontov-cpp/2e1b3e0fd1ec7f4032aad524cc7830f9
После правки нужно информацию по .htaccess и настройке APP_URL, HMR_SERVER и прочего добавить в вики по инсталляции. И можно закрывать issue.
А что вы с APP_URL делали? Вообще его не нужно менять. Функция asset() никак эту переменную не учитывает. asset() берет рутовый урл из запроса.
Я его натравил туда, где лежит сайт.
Ну а можете установить APP_URL="http://localhost"
и убедиться, что все работает? И закроем тогда ишью.
Не раньше чем вечером.
Настройки для .htaccess добавьте в Wiki/Installation
Те, которые вы присылали? Они там точно нужны? Не только же на апаче можно запустить, да и окужение не у всех одинаковое.
Добавьте секцию для настроек Apache и все. Сейчас ещё проверяю остальное (APP_URL).
Добавил.
Ок, кроме сгенерированного .htaccess (который впрочем во всех остальных ситуациях подошел бы) проблем нет. Проблему закрываю.
Общая проблема связанная с приложением - это то, что оно может нормально работать только под artisan. Однако на большинстве хостингов есть LAMP/WAMP, под которым приложение явно не тестировалось.
Начать стоит с https://github.com/melihovv/grammar_review_tool/issues/103#issuecomment-275771107