it-swarm-vi.com

Gợi ý cho settings.php - Nhà phát triển cục bộ, Máy chủ phát triển, Máy chủ trực tiếp

Về cơ bản, một trong những câu hỏi lớn nhất mọi thời đại: một số cách bạn đang sử dụng settings.php trong quy trình phát triển/dàn dựng của bạn là gì?

Ngay bây giờ, tôi có tệp settings.php của mình được thiết lập như sau và tôi dựa trên sự phát triển của mình trên máy chủ $ Host directive, nghĩa là tôi có thể làm việc trên dev.example.com cho máy chủ phát triển (chia sẻ), local.example. com cho máy tính cục bộ của tôi (và kiểm tra mã địa phương của nhà phát triển khác) và www.example.com (hoặc chỉ example.com) cho trang web trực tiếp.

(Mã này nằm trong phần 'Cài đặt cơ sở dữ liệu' của 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;

}
?>

Điều này hoạt động khá tốt cho hầu hết các mục đích, nhưng điều đó có nghĩa là chúng ta có rất nhiều mã ngoại lai ngồi xung quanh trong tệp settings.php được chia sẻ của chúng ta ... có cách nào tốt hơn không?

80
geerlingguy

Những gì tôi làm là tách tệp đó thành settings.php và local.sinstall.php.

Ở cuối settings.php là đoạn mã sau:

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

Sau đó, tệp cục bộ được loại trừ khỏi mọi VCS bạn đang sử dụng. Ưu điểm là bạn có thể đặt các cài đặt phổ biến trên tất cả các phiên bản trong settings.php và có phiên bản/phân phối đó tự động và giữ các nội dung cục bộ trong local.sinstall.php.

66
Berdir

Điều này có vẻ như bạn đang phát minh lại chức năng đa trang của Drupal.

Cá nhân, tôi giữ tất cả các chủ đề và mô-đun chuẩn cho trang web trong sites/all, và sau đó có sites/dev.example.comsites/example.com.

Là một phần thưởng bổ sung, sau đó bạn có thể có các thư mục files khác nhau cho mỗi trang web và bạn có thể thêm bất kỳ mô-đun phát triển nào vào sites/dev.example.com/modules cũng.

25
Paul Jones

Tôi thích bỏ qua tệp cục bộ (sử dụng .gitignore tệp trong git) và sau đó giữ các phiên bản riêng biệt nếu tệp trên mỗi Máy chủ.

10
ack

Tôi có xu hướng luôn thiết lập các mục nhập tệp DNS hoặc Máy chủ lưu trữ và sử dụng

dev.example.com
staging.example.com

example.com

Sau đó, tôi có các thư mục cài đặt tập tin hoàn toàn riêng biệt với các thư mục tập tin khác nhau. Chẳng hạn ./sites/dev.example.com/files

6
Stewart Robinson

Tại sao không có một vài thư mục dựa trên tên Máy chủ phát triển?

Thí dụ

  • trang web/dev1.domain.com
  • trang web/dev2.domain.com
  • trang web/dev3.domain.com
  • trang web/www.domain.com

Mỗi tệp có tệp cài đặt riêng và db_url.

5
Kevin

Nếu điều duy nhất thay đổi là thông tin xác thực cơ sở dữ liệu, thì bạn có thể đặt biến môi trường trong cấu hình Máy chủ ảo cục bộ (và dàn/sản xuất) hoặc trong .htaccess một thư mục phía trên thư mục gốc của bạn. Đây là một ví dụ đơn giản:

/var/www/example.com/drupal-resides-here

Sau đó tôi có thể tạo tệp .htaccess tại đây:

/var/www/example.com/.htaccess

có mã sau:

SetEnv DB1_USER my_local_user
SetEnv DB1_PASS my_local_pass
SetEnv DB1_Host my_local_Host
SetEnv DB1_NAME my_local_dbname

Sau đó trong /var/www/example.com/drupal-resides-here/sites/default/settings.php (hoặc bất cứ điều gì) bạn có thể lấy thông tin đăng nhập db như:

$db_url = "mysql://{$_SERVER['DB1_USER']}:{$_SERVER['DB1_PASS']}@{$_SERVER['DB1_Host']}:{$_SERVER['DB1_PORT']}/{$_SERVER['DB1_NAME']}";

Điều này cho phép nhiều nhà phát triển chạy mọi thứ cục bộ và bạn có thể Đẩy để dàn/sản xuất trong khi vẫn theo dõi settings.php (có nhiều thứ trong đó hơn là thông tin xác thực cơ sở dữ liệu ...). Bạn cũng sẽ không phải theo dõi nhiều tệp settings.php.

2
Charlie Schliesser

Giải pháp đơn giản và hiệu quả nhất chỉ là một dòng là như sau. Chỉ cần đưa nó vào dòng cuối cùng của tệp settings.php của bạn:

@include('settings.local.php');

Biểu tượng @ ở phía trước chỉ có nghĩa là không hiển thị bất kỳ lỗi nào ngay cả khi nó không tìm thấy tệp đó. Thiết lập điển hình như thế này liên quan đến một điều kiện để kiểm tra xem tập tin có ở đó không. Điều này thực hiện nó trong một dòng mà không có nó.

http://php.net/manual/en/lingu.operators.errorcontrol.php

Còn được gọi là toán tử STFU PHP .

0
Patoshi パトシ