symfony2 - как переключиться с "dev" на "prod"?
Я скачал Symfony2 и могу запустить его через app_dev.php.
Но когда я пытаюсь запустить через app.php, я получаю страницу ошибки 404.
Файл app.php, конечно же, существует и выполняется.
Ошибка, по всей видимости, происходит где-то после последней строки кода в app.php:
$kernel->handle(Request::createFromGlobals())->send();
Я думаю, что где-то есть переключатель, который нужно настроить.
EDIT:
Как предложил GeLo, я добавил маршрутизацию для производственной версии в app/config/routing.yml:
_welcome:
resource: "@AcmeDemoBundle/Resources/config/routing.yml"
prefix: /
Я создал файл src/Acme/DemoBundle/Resources/config/routing.yml с содержимым:
bla:
pattern: /
defaults: {_controller:AcmeDemoBundle:Demo:index}
В методе DemoController::indexAction()
я добавил die(__FILE__);
.
Ничего не происходит; я все равно получаю 404 из app.php!?
EDIT по поводу ответа:
./app/console --env=prod cache:clear
Это помогло. Обратите внимание на параметр env.
5 ответ(ов)
По умолчанию Symfony 2 поставляется с демо-бандлом, который доступен только в среде разработки.
В производственной среде не содержится никаких маршрутов, поэтому получение страницы с ошибкой 404 — это нормально.
ПРАВКИ:
Вы уверены, что ваш бандл включен в файле AppKernel.php?
Если да, то очистите кэш с помощью следующей команды: ./app/console cache:clear
Проверьте, доступен ли маршрут с помощью следующей команды: ./app/console router:debug
Чтобы изменить владельца каталогов, используйте команду chown
. В вашем случае, чтобы задать владельца и группу www-data
для директорий app/cache
и app/logs
, выполните следующие команды:
sudo chown www-data:www-data -R app/cache
sudo chown www-data:www-data -R app/logs
Обратите внимание, что -R
означает рекурсивное изменение владельца для всех файлов и подпапок внутри указанной директории. Это позволит веб-серверу, работающему от имени пользователя www-data
, иметь необходимые права на доступ к этим папкам.
Синтаксис команды chown
выглядит следующим образом:
chown <ПОЛЬЗОВАТЕЛЬ>:<ГРУППА> <ПЕРЕКЛЮЧАТЕЛИ> <ДИРЕКТОРИЯ>
Где:
<ПОЛЬЗОВАТЕЛЬ>
— это имя пользователя, которому вы хотите передать права.<ГРУППА>
— это группа, к которой относится пользователь.<ПЕРЕКЛЮЧАТЕЛИ>
— это опциональные параметры, такие как-R
для рекурсивного применения.<ДИРЕКТОРИЯ>
— это путь к директории, которую вы хотите изменить.
Таким образом, убедитесь, что указанные команды выполнены правильно, чтобы избежать проблем с правами доступа к папкам.
Если вы столкнулись с проблемой интеграции нескольких пакетов в свежей установке Symfony2, вот пара советов, которые могут помочь.
При стандартной установке вы получаете AppBundle в директории /src/AppBundle
, а также AcmeDemoBundle в /src/Acme/DemoBundle
.
Если вы хотите запустить AcmeDemoBundle на app_dev
и в то же время иметь приложение (например, AppBundle, который предоставляется с новой установкой) на app.php
(чтобы избежать ошибки 404), вы можете сделать следующее:
- В файле /app/config/routing_dev.yml закомментируйте следующие строки (если они у вас есть):
_main:
resource: routing.yml
- В файле /app/config/routing.yml добавьте новый маршрут (если у вас его нет):
index:
pattern: /
defaults: { _controller: AppBundle:Default:index }
- Затем очистите кэш, как уже рекомендовали другие, и протестируйте приложение по следующим URL:
Если все сделано правильно, при переходе по первому адресу вы должны увидеть белую страницу с надписью "Homepage." (чтобы изменить это, перейдите в /app/Resources/views/default/index.html.twig...
Глобальный шаблон для этого — base.html.twig
). А на втором адресе вы должны увидеть DemoBundle, предоставленный Symfony2.
Надеюсь, это поможет!
Я решил эту проблему, просто изменив владельца директории /Symfony2/app/cache/prod
на учетную запись веб-сервера (т.е. 'master-chef'). Команда для этого выглядит следующим образом:
$sudo chown master-chef -R /var/www/Symfony2/app/cache/prod
В вашем файле "web/app.php" найдите строку:
$kernel = new AppKernel('prod', false);
Замените значение на "true":
$kernel = new AppKernel('prod', true);
Теперь вы можете загружать приложение в режиме производства.
UTF-8 на всех уровнях!
Сортировка двумерного массива по значению в столбце
Что такое потокобезопасность и непотокобезопасность в PHP?
Как передать переменные и данные из PHP в JavaScript?
Вставка нового элемента в массив в любом месте в PHP