Что вы думаете об этой странной идее о том, как настроить экземпляры разработки / постановки / производства? - PullRequest
2 голосов
/ 14 декабря 2008

Я только что получил странное представление о том, как настроить параметры, зависящие от среды. Подобные параметры вы можете найти в config / database.yml

Rails

В моем текущем проекте я использую PHP и Litespeed Web Server (хотя та же техника применяется к PHP + Apache), и я подумал ... «почему бы не использовать для этого mod_rewrite? У меня есть отдельные конфиги виртуальных хостов для каждого env (разработка / производство на данный момент)

Что у меня сейчас есть:

<code>
RewriteRule (.*) $1 [env=development:1]

для среды разработки vhost. Но что, если это будет что-то подобное?

<code>
RewriteRule (.*) $1 [env=development:1,env=mysql_host:localhost,env=mysql_port:3306,env=mysql_user:root,env=mysql_pass:,env=mysql_db:mydbname]

Будет ли это иметь смысл или вызовет некоторые проблемы? Что ты думаешь?

Ответы [ 5 ]

3 голосов
/ 14 декабря 2008

Я не верю, что правила переписывания являются особенно интуитивно понятным местом для размещения информации о конфигурации. Может быть, я что-то неправильно понимаю, но единственная разница между средой разработки, промежуточной и производственной средой для соединения с базой данных? Обычно код также отличается (по крайней мере, после внесения изменений), и поэтому, если вы используете систему контроля версий, я думаю, что было бы лучше иметь файл конфигурации шаблона (database.cfg.template), который вы копируете (и попросите вашу систему контроля версий игнорировать) и измените (в database.cfg). Тогда очевидно, где эта информация.

1 голос
/ 15 декабря 2008

Вы правы - это странная идея.

IMO, это действительно плохое использование для mod_rewrite. Правда, информация о конфигурации относится к компьютеру, а не к базе кода (ошибка, которую я вижу, люди делают постоянно), но она также не обязательно относится к конфигурации веб-сервера.

Я бы порекомендовал файл конфигурации, который не управляется системой контроля версий.

0 голосов
/ 02 января 2009

Лучшим и единственным местом, где вы должны определить текущую среду, является начальная загрузка.

Посмотрите на symfony или agavi загрузочных файлов.

0 голосов
/ 02 января 2009

Прежде всего, если вы на самом деле не меняете URL, не используйте $ 1 в качестве замены, просто используйте тире. Согласно документам:

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

Но на самом деле, я думаю, что ответ mod_env . Директивы SetEnv могут быть размещены в ваших блоках, избегая ненужного foo RewriteRule.

0 голосов
/ 21 декабря 2008

Если вы хотите установить среду в vhost, вы можете сделать что-то вроде

php_value ENV "development"

А затем прочитать его из массива $_SERVER

...