กำหนดค่า settings.php เองในระหว่างการติดตั้งโปรไฟล์อย่างไร


9

ฉันกำลังสร้างโปรไฟล์การติดตั้งสำหรับโครงการภายใน บริษัท ปัจจุบันของฉัน

ในระหว่างกระบวนการติดตั้งหนึ่งในโมดูลที่กำหนดเองแฮงค์ในช่วงinit()เนื่องจากมันพยายามที่จะใช้ตัวแปรทั่วโลกหนึ่งที่กำหนดไว้บนsettings.php(นั่นคือพฤติกรรมเริ่มต้นปัจจุบันของโมดูล)

ใช้system_form_install_settings_form_alter()ฉันเปลี่ยนรูปแบบการตั้งค่าโดยเพิ่มหนึ่งช่องข้อความสำหรับการป้อนข้อมูลของผู้ใช้และเมื่อส่งค่าจะถูกผนวกเข้ากับsettings.phpแต่settings.phpจะเขียนใหม่ก่อนที่การติดตั้งโปรไฟล์จะเริ่ม

มีวิธีใดที่จะป้องกันการล้างข้อมูลsettings.phpโดยกระบวนการติดตั้ง?


1
อาจเป็นการง่ายกว่าที่จะแก้ไขโมดูลที่ขัดข้องและส่งการเปลี่ยนแปลงของคุณไปยังคิวปัญหาสำหรับโครงการนั้น ก่อนที่การเปลี่ยนแปลงของคุณจะได้รับการยอมรับคุณสามารถเพิ่มการอ้างอิงถึงแพทช์ของคุณใน makefile สำหรับโปรไฟล์การติดตั้งของคุณ
greg_1_anderson

สวัสดีขอบคุณสำหรับคำตอบของคุณ มันเป็นโมดูลภายในที่กำหนดเอง (ไม่ใช่ contrib หนึ่ง) แต่ใช่ฉันได้ทำการแก้ไขและแก้ไขปัญหาแล้ว
Paulo Gomes

มันเป็นสิ่งที่ใช้ไฟล์ settings.local.php ที่แทนที่ไฟล์ settings.php อาจช่วยได้?

การเชื่อมโยงนี้เป็นความช่วยเหลือที่ยิ่งใหญ่สำหรับฉันpreviousnext.com.au/blog/...
วิก

คำตอบ:


3

คุณอาจพบว่าการใช้ a settings.common.php

บ่อยครั้งในช่วงโปรเจ็กต์ของทีมเรามีโลคอลที่settings.phpมีข้อมูลประจำตัวของฐานข้อมูล ฯลฯ และ a settings.common.phpพร้อมการตั้งค่าทั่วไปสำหรับสภาพแวดล้อมการติดตั้งและการปรับใช้

คุณสามารถเพิ่มsettings.common.phpด้วยบรรทัดการรวม / ต้องการsettings.php

require 'settings.common.php'; // same directory, e.g sites/default/settings.common.php

จากนั้นจึงเขียนลงไปตามต้องการระหว่างการติดตั้ง


3

คำตอบของฉันขึ้นอยู่กับเซิร์ฟเวอร์ที่ใช้ Apache แต่ฉันคิดว่าเว็บเซิร์ฟเวอร์อื่นสามารถทำได้เช่นกัน

ในการกำหนดค่า virtualhost ของคุณคุณสามารถตั้งค่าตัวแปรทั้งหมดสำหรับสภาพแวดล้อมของคุณ:

SetEnv DBUSER datbase_user
SetEnv DBPASS database_pass
SetEnv DBNAME database_name
SetEnv DBHOST localhost

และในไฟล์ settings.php ของคุณ:

$databases = array (
   'default' => 
   array (
     'default' => 
     array (
       'database' => $_SERVER["DBNAME"],
       'username' => $_SERVER["DBUSER"],
       'password' => $_SERVER["DBPASS"],
       'host' => $_SERVER["DBHOST"],
       'port' => '',
       'driver' => 'mysql',
       'prefix' => '',
    ),
   ),
 );

คุณสามารถตั้งค่าตัวแปรอื่น ๆ ด้วยวิธีนี้เช่นกัน

หากคุณกังวลเกี่ยวกับอาเรย์ $ _SERVER ที่ผิดมือคุณสามารถยกเลิกการตั้งค่าตัวแปรสำคัญทั้งหมดที่ด้านล่างของ settings.php:

unset($_SERVER["DBUSER"]);
unset($_SERVER["DBPASS"]);
unset($_SERVER["DBNAME"]);
unset($_SERVER["DBHOST"]);

นี่คือวิธีที่เราทำที่สำนักงานของฉันเพื่อย้ายไซต์ระหว่างสภาพแวดล้อมการพัฒนาของเราการจัดเตรียมและแม้แต่การผลิต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.