melihovv / grammar_review_tool

Tool for review formal grammars in Bison/Lemon format
MIT License
5 stars 2 forks source link

Сделать, чтоб приложение работало под LAMP/WAMP #104

Closed mamontov-cpp closed 7 years ago

mamontov-cpp commented 7 years ago

Общая проблема связанная с приложением - это то, что оно может нормально работать только под artisan. Однако на большинстве хостингов есть LAMP/WAMP, под которым приложение явно не тестировалось.

Начать стоит с https://github.com/melihovv/grammar_review_tool/issues/103#issuecomment-275771107

melihovv commented 7 years ago

Я разрабатываю под OpenServer`ом, на апаче. Нужно просто DocumentRoot в путь до public указывать. И все работает.

mamontov-cpp commented 7 years ago

Укажите настройки в wiki. Желательно, чтобы была возможность настроить это через .htaccess.

melihovv commented 7 years ago

Добавить .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__;
});
mamontov-cpp commented 7 years ago

Ок, спасибо. Проверю, но уже завтра.

mamontov-cpp commented 7 years ago

А попробуйте на хосте ставить его не в DocumentRoot (так проекты ставят далеко не всегда), а в какую-то папку, например DocumentRoot/grammar_review_tool. Думаю, что в таком случае RewriteRule должен быть другим.

mamontov-cpp commented 7 years ago

По-моему нужны правки наподобие https://laravel.io/forum/03-08-2016-laravel-5-installation-in-subdirectory .

mamontov-cpp commented 7 years ago

Нашел, где проблема. У вас для вывода ассета на странице логина в режиме local используетсся hmr_asset, которая подчистую игнорирует результаты npm run build, которая строит объединенные ассеты. Вообще эта функция странная, у меня вообще выходит что она никогда не будет работать правильно с npm run build (как понимаю, скорее всего потому что для разработки используется другая команда).

Соответственно, у вас и неправильно выходит. Нужно в wiki сказать, что при инсталляции переменную APP_ENV нужно переключить в production - тогда пути к ассетам выводятся верно.

Сейчас посмотрю, что с .htaccess.

melihovv commented 7 years ago

А в вики это было указано. 4 пункт set APP_ENV=production in .env file

melihovv commented 7 years ago

И вот в этом комменте писал, откуда что берется. https://github.com/melihovv/grammar_review_tool/issues/103#issuecomment-275771641

mamontov-cpp commented 7 years ago

А, ок, понятно. Теперь остается только решить проблему с путями до ассетов - там пока почему-то папка на которой они находятся не указывается, хотя в APP_URL все прописано верно.

melihovv commented 7 years ago

А я нигде не писал, что APP_URL нужно менять. Можете прислать скриншот с панели network в браузере? Или словами описать: на какой адрес делается запрос и какой приходит ответ? И в каком окружении вы все это делаете: local or production?

mamontov-cpp commented 7 years ago

Удивительно, но если обернуть вызовы 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>

Иначе статические ассеты отдаваться не будут.

melihovv commented 7 years ago

Ок. elixir берет пути из файла assets/rev-manifest.json, если что.

mamontov-cpp commented 7 years ago

Да, спасибо, я видел. Но он берёт относительные пути относительно корня приложения. Для получения абсолютных, нужен asset().

mamontov-cpp commented 7 years ago

Не подскажете, откуда генерируется файл? Это страница авторизации в /storage/framework/views/ Непонятно из чего она генерируется. default

mamontov-cpp commented 7 years ago

Нашел сам. Нужно подправить resources/views/layouts/app.blade.php.

mamontov-cpp commented 7 years ago

Прикрепляю правку. Протестите, пожалуйста у себя. У меня-то оно работает, но у вас все же другая конфигурация. Хотелось бы универсальное решение.

https://gist.github.com/mamontov-cpp/2e1b3e0fd1ec7f4032aad524cc7830f9

mamontov-cpp commented 7 years ago

После правки нужно информацию по .htaccess и настройке APP_URL, HMR_SERVER и прочего добавить в вики по инсталляции. И можно закрывать issue.

melihovv commented 7 years ago

А что вы с APP_URL делали? Вообще его не нужно менять. Функция asset() никак эту переменную не учитывает. asset() берет рутовый урл из запроса.

mamontov-cpp commented 7 years ago

Я его натравил туда, где лежит сайт.

melihovv commented 7 years ago

Ну а можете установить APP_URL="http://localhost" и убедиться, что все работает? И закроем тогда ишью.

mamontov-cpp commented 7 years ago

Не раньше чем вечером.

mamontov-cpp commented 7 years ago

Настройки для .htaccess добавьте в Wiki/Installation

melihovv commented 7 years ago

Те, которые вы присылали? Они там точно нужны? Не только же на апаче можно запустить, да и окужение не у всех одинаковое.

mamontov-cpp commented 7 years ago

Добавьте секцию для настроек Apache и все. Сейчас ещё проверяю остальное (APP_URL).

melihovv commented 7 years ago

Добавил.

mamontov-cpp commented 7 years ago

Ок, кроме сгенерированного .htaccess (который впрочем во всех остальных ситуациях подошел бы) проблем нет. Проблему закрываю.

melihovv commented 7 years ago

Upgrade grammar_review_tool to laravel 5.4