Развертывание Symfony4 на виртуальном хостинге

Я использую symfony4. В dev все работает. Но для прод. Как развернуть учебник содержит только меньше информации (Нет информации о виртуальном хостинге)

Index.php не позволяет .env читать переменные среды. Это нормально. Но в Symfony2.x мы можем переключаться между env с помощью фронтальных контроллеров app.php и app_dev.php. Но в Symfony4 таких файлов нет, только один index.php и файл .env

Согласно ссылке развертывания .

То, как вы устанавливаете переменные среды, зависит от вашей настройки: они могут быть установлены в командной строке, в вашей конфигурации Nginx или с помощью других методов, предоставляемых вашей службой хостинга.

Я использую виртуальный хостинг, поэтому провайдер не позволяет изменять переменные среды. Если он есть в моем файле, я могу его использовать.

В настоящее время, чтобы решить эту проблему, я делаю следующее:

$_SERVER['APP_ENV'] = "prod";
$_SERVER['APP_SECRET'] = "79cfa09223f91b1a195134019e0b17ac";

Я добавил эти две строки в начало файла index.php и bin / console. Я считаю, что это неправильный способ.

Предложите мне развернуть symfony4 (даже тестовая среда prod)


person Sudhakar Krishnan    schedule 23.12.2017    source источник
comment
Почему вы не редактируете файл .env на своем производственном сервере, чтобы установить его как prod?   -  person Louis-Marie Matthews    schedule 03.01.2018
comment
@ Louis-MarieMatthews Думаю, должен быть простой способ. Мне нужно изменить файл .env на .prod (изменение имени файла). Или что? APP_ENV = продукт   -  person Sudhakar Krishnan    schedule 17.01.2018


Ответы (2)


Вам нужен .env файл, который находится на сервере, чтобы иметь APP_ENV=prod .env файл предназначен для конкретной машины, он игнорируется git, а .env.dist отслеживается. Так что отредактируйте .env.dist и зафиксируйте его.

Поместите свой проект в тот же каталог, что и public_html, как брат или сестра. Затем удалите каталог public_html и воссоздайте его как символическую ссылку, указывающую на общедоступный каталог вашего проекта.

Переименуйте .env.dist в .env.

Запустите composer require symfony/apache-pack, он создаст файл .htaccess, и все будет хорошо.

Работал у меня на сервере A2hosted.

Обновление 2019-06-28

Только что развернутые на Bluehost, они наконец обновились до PHP 7. Я развернул их в поддомене, используя тот же процесс, что и выше, за исключением одного изменения. Мне пришлось добавить следующую строку в файл public / .htaccess, созданный apache-pack, чтобы включить PHP 7.1

AddHandler application/x-httpd-ea-php71 .php
person Arleigh Hix    schedule 25.02.2018

Я использую сервер Apache для производства (общий хостинг). Легко отредактировать файл .htaccess.

Добавьте это в конец файла .htaccess

# ENVIRONMENT VARIABLES
SetEnv APP_ENV prod
SetEnv APP_SECRET 79cfa09223f91b1a195134019e0b17ac

Это решит вопрос.


Это то, с чем я столкнулся лично, поэтому, чтобы помочь кому-то,

И иногда symfony4 выдает ошибку на серверах php7.2. Чтобы решить эту проблему, добавьте в файл .htaccess следующий код:

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php72” package as the default “PHP” programming language.
<IfModule mime_module>
  AddType application/x-httpd-ea-php72 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit

Этот код автоматически генерируется моим сервером. Думаю, кому-то это нужно.


Сначала я попытался развернуть свое приложение без файла .htaccess. Но это вызывает ошибку, нет вывода на производственный сервер. Я попытался переключить php и, наконец, увидел приведенный выше код, сгенерированный самим сервером, а позже добавил setenv для работы с symfony4.

person Sudhakar Krishnan    schedule 23.12.2017
comment
Просто примечание об ошибке, которую вы упомянули в PHP 7.2: я использую Symfony 4 на Apache с PHP7.2. В моем случае было достаточно выполнить composer require symfony/apache-pack и убедиться, что mod_rewrite включен. - person Louis-Marie Matthews; 03.01.2018
comment
.htaccess находится в папке public? А можно папку public сменить на public_html? - person Matt; 18.03.2018
comment
@Matt вы можете сделать, добавив следующее в composer.json extra: {public-dir: public_html, symfony-web-dir: public_html} - person Sudhakar Krishnan; 19.03.2018