Тот же временный путь к файлу для локального хоста и рабочего сервера?


Каждый раз, когда я перемещаю один из своих веб-сайтов Drupal с локального хоста на рабочий сервер или наоборот, мне приходится редактировать свой settings.php, чтобы обновить путь к каталогу временных файлов:

# $conf['file_temporary_path'] = '/home5/dawnings/public_html/fw2/tempdir';
$conf['file_temporary_path'] = 'c:/Temp/Drupal/tempdir';

Есть ли способ раз и навсегда указать уникальный относительный путь к этому временному файловому каталогу, который будет работать как для локального хоста, так и для рабочего сервера? Цель состоит в том, чтобы больше не обновлять мой settings.php.

Author: Jérôme Verstrynge, 2012-04-16

1 answers

Существует более 1 способа сделать что-то подобное. Я не знаю о простом "универсальном исправлении 1 строки", если вы не попробуете относительный путь, но это предполагает некоторую согласованность между вашими серверами, которой, очевидно, по вашим путям каталогов у вас нет.

Вариант 1:

В глубине тебя settings.php поставьте что-то вроде:

$local_settings_conf = dirname(__FILE__) . '/settings.local.php';
if (file_exists($local_settings_conf)) { include $local_settings_conf; }

Я делаю это программно в BASH с помощью:

#!/bin/bash

# I actually install drupal via the command line with a custom install
# profile and append on the tidbit to settings.php programmatically like
# so ...

cd $drupal_www_dir
drush site-install MY_INSTALL_PROFILE \
  --locale=en \
  --db-url="mysql://dev_user:dev@localhost:3306/demo_drupal" \
  --account-name=admin \
  --account-pass='admin' \
  [email protected] \
  --site-name=demo --verbose -y


#
# Now that drupal is built we modify the settings.php file with additional db
# and other custom configuration values by appending a child seetings file.
#
# This is in concept similar to an Apache vhost directive file.
#
echo "altering settings.php to be aware of our 3rd party remote databases."
sudo chmod -Rv a+rw "${drupal_www_dir}/sites/default"
read -r -d '' PHPCODE <<'EOF'
/*
 * For our project we provide our own localized configuration schemes.
 */
$local_settings_conf = dirname(__FILE__) . '/settings.local.php';
if (file_exists($local_settings_conf)) { include $local_settings_conf; }

EOF
echo "${PHPCODE}" >> "${WWW}/sites/default/settings.php"

Затем для каждого сервера вы сохраняете версию этого файл. Или в этом файле создайте PHP-блок If-Else, который хранит правильное значение $conf в зависимости от того, является ли этот файл конфигурации $local vs $dev или $prod. Так что в принципе вы можете переместить все свои пользовательские settings.php вещи, которые не являются 100 % запасом drupal, помещаются в специальный прилагаемый файл конфигурации... таким образом, биржевой друпал settings.php остается как есть, и все ваши пользовательские материалы могут быть помещены в свой собственный файл по мере необходимости.

Вариант 2:

Используйте что-то вроде модуля среды и в PHP установите значение для file_temporay_path с помощью variable_set, так как это то, что называется file_directory_temp().

Это два известных мне варианта, которые не являются хирургией головного мозга...

РЕДАКТИРОВАТЬ 26.09.2014 автором

  • Вы также можете использовать Drush на каждом сервере для запуска: drush vset file_temporary_path "to/some/path"
  • Если вас устраивают настройки виртуального хоста, вы также всегда можете создать каталог с псевдонимами в конфигурации вашего веб-сервера (подняв проблему на 1 уровень в производственный стек (из PHP))
 4
Author: tenken, 2014-09-26 14:58:07