2013-01-25 3 views
4

Я пытаюсь настроить несколько сред в приложении Laravel 4 и, естественно, различные базы данных, в зависимости от того, в какой среде мы находимся.Как настроить различные среды на Laravel 4?

Для моей локальной машине, настроить виртуальный хост для «local.elders.dev»

К сожалению, по какой-то причине, следующий код не работает.

$env = $app->detectEnvironment(array(
    'local' => array('http://local.elders.dev'), 
)); 

Возможно, мне нужно запустить команду ремесленника или что-то еще. Я чувствую, что я рядом, но еще не совсем!

Спасибо всем!

+0

Я не знаю, что «по какой-то причине не работает». Есть какая-то ошибка PHP, чтобы хвастаться? :) –

+0

Нет, это просто не распознает мою локальную среду ... У меня есть файл database.php в папке «config/local», но Laravel по-прежнему использует производственные настройки для db .. –

+0

Тип var_dump ($ _ SERVER) ; умереть(); перед $ env и посмотреть, как называется ваше имя сервера, - затем установите его на – Laurence

ответ

1

OK! Я просто решил проблему ... Код действительно работал нормально! Проблема заключается в том, что я использовал

$_SERVER['DB1_HOST'] //for Pagodabox. 

Конечно, это не было на моей местной окружающей среды, которая в значительной степени сломал приложение ...

Я исправил просто делать:

isset($_SERVER['DB1_HOST']) ? $_SERVER['DB1_HOST'] : ''; 

Благодаря @jeroen и @theshiftexchange :)

0

Попробуйте заменить его 'local.elders.dev', я не уверен на 100%, но это, вероятно, совпадение имен хостов, а не полных путей.

+0

Не работает :( –

+0

Что о '' * .dev''? Если даже это не соответствует, есть что-то не так, как вы настроили файл конфигурации базы данных. – Jeroen

+0

@jeroden Вы были правы. Локальная среда была настроена правильно ... I willanswer мой собственный вопрос с тем, как я могу это исправить –

3

Я знаю, что это отвечает, но и для других, которые ищут решение ...

Моя установка обнаружения среда выглядит следующим образом:

$env = $app->detectEnvironment(array(

// Development 
// any machine name with the term "local" will use the local environment 
'local' => array('*local*'), 

// Stage 
// any machine name with the term "stage" will use the stage environment 
'stage' => array('*stage*') 

// Production 
// production is default, so we don't need to specify any detection 

));

Это удобно, потому что он будет работать над любым проектом, если я использую «local» для разработки (например, «localhost», «localhost: 8000», «my.app.local» и т. Д.). То же самое касается «сцены». И производство является дефолтом, так что ничего, кроме «местного» или «стадии», не работает для производства.

+1

Murzeb: Я работаю на своей локальной машине с WAMP. Я добавил вышеприведенную кодировку в start.php. Но значение среды возвращает производство. Как я могу получить локальную среду? локальный URL-адрес: http: // localhost/laravel-app/public/home. Пожалуйста, совет. – user2003356

4

Другой способ - использовать имя папки, в которой находится проект. Это работает в консоли и в Интернете. Я обнаружил, что это единственный надежный способ, если разные среды размещены на одном сервере.

$env = $app->detectEnvironment(array(
    'staging'  => strpos(getcwd(), '/staging')>-1, 
    'acceptance' => strpos(getcwd(), '/acceptance')>-1, 
    'production' => strpos(getcwd(), '/production')>-1, 
)); 

Большим преимуществом является то, что вы можете перемещать постановки на производство, просто переименование или копирование папки проекта без изменения файлов, БД записей или переменных окружения.

0

Laravel 4 обнаруживает среды через имена машин, указанные в файле «bootstrap/start.php».

Например, в моем случае конфиг будет:

$env = $app->detectEnvironment(array(
    'local' => array('Victor.local', 'Victor-PC'), 
)); 

Это означает, что Laravel будет использовать «локальные» параметры среды для обеих машин: «Victor.local» (Мак) и «Виктор- ПК (Windows).

Для того чтобы узнать текущее имя машины, вы можете использовать следующий PHP код:

<?php echo gethostname(); ?>

Для каждой среды вы можете создать папку в приложение/конфигурации и заменить нужные файлы конфигурации и свойства ,

С уважением!

3

Обработка нескольких сред на одной машине с Laravel 4x

Что делать, если вы хотите запустить несколько сред на одной машине с тем же Name- к примеру, постановка и производства И местного Окружающая среда?

Существует лучшее решение для обработки сред в Laravel 4x-, и это может быть сделано путем добавления одного лайнера к вам ВХосты файл- или .htaccess:

Установки местной переменная среда

В или виртуальном хосте .htaccess добавить для локальной установки для постановки, например добавить:

SetEnv LARAVEL_ENV staging 

и тому же в вашем производства .htaccess или vhost:

SetEnv LARAVEL_ENV production 

Тогда обычная функция detectEnvironment() в start.php.

$env = $app->detectEnvironment(function() 
{ 
// Default to local if LARAVEL_ENV is not set 
return getenv('LARAVEL_ENV') ?: 'local'; 
}); 

Мы не забыли местного ... и это прохладное ваша установка прошёл пробы по умолчанию будет локальным, если ни одна из переменных среды находится в виртуальный хост или .htaccess, так как они будут найдены в другие установки.

+0

Это моя предпочтительная техника с одной разницей: я предпочитаю по умолчанию производить. Если мы по умолчанию ничего не делаем, Колорадо В продуктах может возникнуть утечка внутренних компонентов - таких как отладочные дампы, трассировки стека и т. д., которые, вероятно, будут включены в предпроизводственные среды. –

+0

Кроме того, не забудьте добавить параметр LARAVEL_ENV в вызовы командной строки либо через bash 'export', либо вручную при вызове, используя что-то вроде' LARAVEL_ENV = staging php/path/to/command.php' –