0

symfony2 - как переключиться с "dev" на "prod"?

2

Я скачал 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 ответ(ов)

0

По умолчанию Symfony 2 поставляется с демо-бандлом, который доступен только в среде разработки.

В производственной среде не содержится никаких маршрутов, поэтому получение страницы с ошибкой 404 — это нормально.

ПРАВКИ:

Вы уверены, что ваш бандл включен в файле AppKernel.php?

Если да, то очистите кэш с помощью следующей команды: ./app/console cache:clear

Проверьте, доступен ли маршрут с помощью следующей команды: ./app/console router:debug

0

Чтобы изменить владельца каталогов, используйте команду 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 для рекурсивного применения.
  • <ДИРЕКТОРИЯ> — это путь к директории, которую вы хотите изменить.

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

0

Если вы столкнулись с проблемой интеграции нескольких пакетов в свежей установке Symfony2, вот пара советов, которые могут помочь.

При стандартной установке вы получаете AppBundle в директории /src/AppBundle, а также AcmeDemoBundle в /src/Acme/DemoBundle.

Если вы хотите запустить AcmeDemoBundle на app_dev и в то же время иметь приложение (например, AppBundle, который предоставляется с новой установкой) на app.php (чтобы избежать ошибки 404), вы можете сделать следующее:

  1. В файле /app/config/routing_dev.yml закомментируйте следующие строки (если они у вас есть):
_main:
    resource: routing.yml
  1. В файле /app/config/routing.yml добавьте новый маршрут (если у вас его нет):
index:
    pattern:  /
    defaults: { _controller: AppBundle:Default:index }
  1. Затем очистите кэш, как уже рекомендовали другие, и протестируйте приложение по следующим URL:

  1. http://ваш_путь_к_приложению/web/

  1. http://ваш_путь_к_приложению/web/app_dev.php

Если все сделано правильно, при переходе по первому адресу вы должны увидеть белую страницу с надписью "Homepage." (чтобы изменить это, перейдите в /app/Resources/views/default/index.html.twig... Глобальный шаблон для этого — base.html.twig). А на втором адресе вы должны увидеть DemoBundle, предоставленный Symfony2.

Надеюсь, это поможет!

0

Я решил эту проблему, просто изменив владельца директории /Symfony2/app/cache/prod на учетную запись веб-сервера (т.е. 'master-chef'). Команда для этого выглядит следующим образом:

$sudo chown master-chef -R /var/www/Symfony2/app/cache/prod
0

В вашем файле "web/app.php" найдите строку:

$kernel = new AppKernel('prod', false);

Замените значение на "true":

$kernel = new AppKernel('prod', true);

Теперь вы можете загружать приложение в режиме производства.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь