بشكل أساسي ، أحد أعظم الأسئلة في كل العصور: ما هي بعض الطرق التي تستخدم بها settings.php في سير العمل الخاص بالتطوير/التدريج؟
الآن ، لقد قمت بإعداد ملف settings.php الخاص بي كما يلي ، وأبني تطوري على توجيه $ Host الخاص بالخادم - مما يعني أنه يمكنني العمل على dev.example.com لخادم التطوير (المشترك) local.example. com للكمبيوتر المحلي الخاص بي (وعمليات السحب من الكود المحلي الخاص بشركة dev) ، و www.example.com (أو فقط example.com) للموقع المباشر.
(هذا الكود موجود في قسم "إعدادات قاعدة البيانات" في settings.php):
$Host = $_SERVER['HTTP_Host'];
$base_url = 'http://'.$Host;
$cookie_domain = $Host;
switch($Host) {
case 'example.com': # Production server
$db_url = 'mysqli://prod_sql_user:[email protected]/prod_db';
$update_free_access = FALSE;
$conf = array (
// Set production config options here...
'example_setting' => 0,
);
break;
case 'dev.example.com': # Development server
$db_url = 'mysqli://dev_sql_user:[email protected]/dev_db';
$update_free_access = FALSE;
$conf = array (
// Set production config options here...
'example_setting' => 0,
);
break;
case 'local.example.com': # Local server
$db_url = 'mysqli://local_sql_user:[email protected]/local_db';
$update_free_access = FALSE;
$conf = array (
// Set production config options here...
'example_setting' => 0,
// Turn off most core caching.
'cache_inc' => 'includes/cache.inc',
'cache' => CACHE_DISABLED,
);
break;
}
?>
يعمل هذا بشكل جيد لمعظم الأغراض ، ولكن هذا يعني أن لدينا الكثير من التعليمات البرمجية الغريبة الموجودة في ملف settings.php المشترك ... هل هناك طريقة أفضل؟
ما أفعله هو فصل هذا الملف إلى settings.php و local.settings.php.
في نهاية Settings.php هو الكود التالي:
if (file_exists(dirname(__FILE__) . '/local.settings.php')) {
include dirname(__FILE__) . '/local.settings.php';
}
ثم يتم استبعاد الملف المحلي من VCS الذي تستخدمه. وتتمثل الميزة في أنه يمكنك وضع الإعدادات الشائعة في جميع الحالات في settings.php وجعلها يتم توزيعها/توزيعها تلقائيًا والاحتفاظ بالأشياء المحلية في local.settings.php.
يبدو هذا وكأنك تعيد اختراع وظائف Drupal المدمجة في مواقع متعددة.
أنا شخصياً أحتفظ بجميع المواضيع والوحدات القياسية للموقع في sites/all
، ثم يكون لديك sites/dev.example.com
و sites/example.com
.
كمكافأة إضافية ، يمكن أن يكون لديك مجلدات files
مختلفة لكل موقع ، ويمكنك إضافة أي وحدات تطوير إلى sites/dev.example.com/modules
كذلك.
أفضل تجاهل الملف محليًا (باستخدام .gitignore
الملف في git) ثم احتفظ بنسخ منفصلة إذا كان الملف على كل مضيف.
أميل دائمًا إلى إعداد واستخدام إدخالات ملف DNS أو Host
dev.example.com
staging.example.com
و
example.com
ثم لدي أدلة ملف إعدادات منفصلة تماما مع أدلة الملفات المختلفة. على سبيل المثال ./sites/dev.example.com/files
لماذا لا يكون لديك بعض المجلدات بناءً على اسم المضيف التطوير؟
مثال
لكل منها ملف الإعدادات الخاصة بهم و db_url.
إذا كانت الأشياء الوحيدة التي تتغير هي بيانات اعتماد قاعدة البيانات ، فيمكنك تعيين متغيرات البيئة في تكوين المضيف الظاهري المحلي (والتدريج/الإنتاج) أو في مجلد .htaccess فوق جذر الويب الخاص بك. إليك مثال بسيط:
/var/www/example.com/drupal-resides-here
يمكنني بعد ذلك إنشاء ملف htaccess هنا:
/var/www/example.com/.htaccess
الذي يحتوي على الكود التالي:
SetEnv DB1_USER my_local_user
SetEnv DB1_PASS my_local_pass
SetEnv DB1_Host my_local_Host
SetEnv DB1_NAME my_local_dbname
ثم في /var/www/example.com/drupal-resides-here/sites/default/settings.php
(أو أيا كان) يمكنك الحصول على بيانات اعتماد db مثل:
$db_url = "mysql://{$_SERVER['DB1_USER']}:{$_SERVER['DB1_PASS']}@{$_SERVER['DB1_Host']}:{$_SERVER['DB1_PORT']}/{$_SERVER['DB1_NAME']}";
يتيح هذا للعديد من المطورين تشغيل الأشياء محليًا ويمكنك الضغط على التجهيز/الإنتاج مع الاستمرار في تتبع الإعدادات. php (هناك أشياء أكثر من بيانات اعتماد قاعدة البيانات فقط ...). لن تضطر أيضًا إلى تتبع ملفات settings.php المتعددة.
الحل الأبسط والأكثر فعالية الذي هو مجرد سطر واحد هو ما يلي. ما عليك سوى تضمينه في السطر الأخير من ملف settings.php الخاص بك:
@include('settings.local.php');
يعني الرمز @ في المقدمة فقط عدم عرض أي خطأ حتى لو لم يجد هذا الملف. يتضمن الإعداد النموذجي مثل هذا شرطيًا للتحقق مما إذا كان الملف موجودًا. هذا ينجزها في سطر واحد بدونها.
http://php.net/manual/en/language.operators.errorcontrol.php
يُعرف أيضًا باسم عامل التشغيل STFU PHP عامل التشغيل .