Laravel 4.2 с использованием поддоменов Apache Dev и Production

Мне нужно настроить среду разработки и производства с использованием поддоменов с Laravel и Apache. Например:

dev.mydomain.com
app.mydomain.com

Где приложение - производство, а разработчик - разработка. Внутри моего / var / www есть папки dev.mydomain.com и app.mydomain.com. Внутри каждой из этих папок у меня есть идентичные проекты Laravel (кроме файлов конфигурации, указывающих на разные поддомены и базы данных).

Я хотел разделить места, чтобы иметь возможность тестировать в разных базах данных, а также тестировать новые файлы разработки перед запуском в производство (с минимальным временем простоя или без него). Я могу получить доступ к любому поддомену по одному, временно удалив конфигурацию другого из моих файлов конфигурации Apache, но это громоздко и вызывает простои для обоих приложений.

Мои файлы .htaccess кажутся правильными, потому что я могу просмотреть тестовый URL-адрес на обоих поддоменах (с помощью простых файлов .html). Когда я пытаюсь получить доступ к поддоменам с установленным laravel, я получаю странные результаты, такие как возможность подключиться к базе данных dev, находясь в поддомене приложения, ИЛИ возможность войти в приложение env, но не могу войти в среду dev или наоборот.

Я искал stackoverflow и искал в Google, чтобы попытаться найти решение, но пока ничего не вышло. В основном я нашел руководства по настройке

detectEnvironment  

с laravel, как в ссылке здесь:

http://chrishayes.ca/blog/code/laravel-4-setting-utilizing-environments-environment-configuration

Есть ли у кого-нибудь решение для этого или лучший способ работы со средой разработки / тестирования в Laravel наряду с производственной средой?


person adam2k    schedule 14.10.2014    source источник
comment
На самом деле laravel делает то же самое, что предлагает Марцин (см. источник). Если вы проверяете свою тестовую страницу из обоих доменов, что будет отображаться при печати gethostname () в PHP? Эти значения используются как индексы для массива сред.   -  person martinczerwi    schedule 14.10.2014
comment
Изменить: не индексы, а значения для массива сред. Индексы могут иметь произвольные имена.   -  person martinczerwi    schedule 14.10.2014
comment
Спасибо за ответ. Имя хоста одинаково для обоих поддоменов, потому что я размещаю на одном сервере. Есть ли какие-то другие способы решения этой задачи или мне нужно будет использовать другой сервер для разработки?   -  person adam2k    schedule 14.10.2014
comment
Я думаю, вам следует точно настроить конфигурацию apache. Используйте NameVirtualHosts и VirtualHost, чтобы определить два виртуальных хоста в конфигурации apache. У каждого должно быть ServerName соответствующего поддомена. Затем вы можете запускать оба домена параллельно, ничего не переключая во время выполнения. Оба домена будут иметь два разных имени хоста, что позволит вам использовать классическую настройку для сред laravel. Есть некоторая работа по настройке, но вы выиграете от дополнительных усилий.   -  person martinczerwi    schedule 15.10.2014
comment
Спасибо @martinczerwi, я настроил этот сервер с помощью AWS. Единственный способ установить NameVirtualHost для двух поддоменов - создать несколько IP-адресов? Есть ли способ сделать это с помощью одного IP-адреса?   -  person adam2k    schedule 18.10.2014
comment
Должен признать, я не разбираюсь в AWS, но обычно это возможно с одним IP-адресом. Оба поддомена указывают на один и тот же IP-адрес, и apache определит, какой VirtualHost использовать. Я искал учебные пособия по этому поводу, и похоже, что вы можете настроить Apache на AWS, как на любом обычном компьютере. См. Это сообщение (calebogden.com/multiple-websites-amazon-ec2-linux-virtual-hosts) Например. На вашем сервере проверьте / etc / apache2 /. Есть папка с доступными сайтами, в которой хранятся все конфигурации Vhost.   -  person martinczerwi    schedule 21.10.2014


Ответы (1)


В bootstrap/start.php вы можете настроить среду в зависимости от используемого домена:

$env = $app->detectEnvironment(function(){
        if (!isset($_SERVER['HTTP_HOST']) ||
            $_SERVER['HTTP_HOST'] =='dev.mydomain.com') {
            return 'dev';
        }
        return 'production';
    });

Единственная проблема здесь с artisan, я полагаю, вы сможете использовать его только для одной среды. В приведенном выше коде artisan будет использоваться для среды разработки (потому что, если вы используете artisan, $_SERVER['HTTP_HOST'] не установлен, а в приведенном выше коде для этой разработки dev выбирается.

person Marcin Nabiałek    schedule 14.10.2014