Làm cách nào để thiết lập default.sinstall.php để sử dụng nó cho các trang web phát triển, thử nghiệm và sản xuất?


8

Tôi sử dụng môi trường dev , tstprd cho trang web Drupal 7 của mình được thiết lập. Tôi sử dụng git để kiểm soát phiên bản.

Tôi muốn loại bỏ một bước thủ công tôi cần làm khi chuyển trang web từ dev sang tst và từ tst sang prd .

Bây giờ tôi phải cập nhật settings.php riêng cho các trang dev, tst và prd.

Tôi muốn thiết lập tệp default.sinstall.php để tất cả các cài đặt cho dev, tst và prd được lưu trữ trong một default.sinstall.php và. Sau khi sao chép vào settings.php, Drupal sẽ chọn đúng cài đặt tùy theo môi trường.

Tôi đang tìm kiếm một cái gì đó giống như mã giả dưới đây:

common.settings 

if environment = dev then
   ...
   dev.settings
   ...
else if environment = tst then
   ...
   tst.settings
   ...
else if environment = prd then
   ...
   prd.settings
   ...
end if

Bạn có biết làm thế nào để làm điều này cho Drupal 7, chính xác?

Câu trả lời:


11

Không sử dụng cùng một tệp cài đặt như bạn đang đề xuất với mã giả. Thay vào đó, sử dụng ba tệp cài đặt khác nhau trong ba thư mục khác nhau, mỗi thư mục tương ứng với tên miền của từng phiên bản của bạn.

Tối thiểu, thông thường mỗi môi trường sẽ sử dụng một máy chủ cơ sở dữ liệu riêng biệt. Các cài đặt khác có thể khác nhau từ môi trường này đến môi trường khác có thể bao gồm máy chủ Apache Solr, cài đặt memcached, thư mục tạm thời và thư mục tệp, để đặt tên cho một số. Bạn có thể đặt tất cả những người ở đó. Khi bạn di chuyển cơ sở dữ liệu của mình từ PROD sang TEST sang DEV, nó sẽ tự động nhận các cài đặt bạn đã chỉ định.

Hãy tưởng tượng rằng trang web của tôi được gọi là myfoobarsite.com. Đây là cách cấu trúc cài đặt của tôi sẽ trông như thế nào:

/htdocs
../sites
..../default
....../default.settings.php
..../dev.myfoobarsite.com (DEV)
....../settings.php
..../qa.myfoobarsite.com (TEST)
....../settings.php
..../myfoobarsite.com (PROD)
....../settings.php

Tôi cũng thường có hai phiên bản cục bộ của trang web, một phiên bản có ảnh chụp cơ sở dữ liệu mới nhất từ ​​PROD và một phiên bản khác nơi tôi giữ tất cả các thay đổi của mình. Điều này rất hữu ích khi làm việc với Tính năng và cho phép bạn kiểm tra các tính năng của mình dựa trên cơ sở dữ liệu sản xuất (cục bộ) trước khi cam kết. Đây là cấu trúc được sửa đổi:

/htdocs
../sites
..../default
..../dev.myfoobarsite.com (DEV)
..../qa.myfoobarsite.com (TEST)
..../myfoobarsite.com (PROD)
..../mfbs.local (LOCAL ONE)
....../settings.php
..../mfbs2.local (LOCAL TWO)
....../settings.php

Đối với các cá thể cục bộ của bạn, hãy nhớ tạo các mục thích hợp trong /etc/hoststệp và sửa đổi cài đặt máy chủ Apache của bạn.

Chỉ trong trường hợp, tôi cũng đã đặt một đoạn trích từ settings.php để được hướng dẫn:

<?php
$databases['default']['default'] = array(
    'database' => 'myfoobarsite',
    'username' => 'foo',
    'password' => 'bar',
    'host' => '127.0.0.1',
    'port' => '3306',
    'driver' => 'mysql',
    'prefix' => '',
);

/**
 * Apache Solr settings.
 * Use the acquia_identifier/acquia_key when hosting w/ Acquia.
 * Specify only the apachesolr_path key for your local instance
 * or instances that do not use Acquia.
 */
//$conf["acquia_identifier"] = "ABCD-12345";
//$conf["acquia_key"] = "1234f05ab12345dc1234a1234bbc1c12";
$conf["apachesolr_path"] = "http://localhost:8983/solr";

/**
 * Filesystem settings (MAC OS X, LOCAL)
 */
$conf["file_public_path"] = "sites/default/files";
$conf["file_temporary_path"] = "/Users/amateurbarista/tmp";
$conf["file_private_path"] = "/Users/amateurbarista/Sites/tfk/private";

Cuối cùng, nếu bạn đang lưu trữ với Acquia, bạn sẽ cần truy cập http://myfoobarsite.com/admin/config/system/acquia-agentvà nhấp vào "xóa khóa" mỗi khi bạn di chuyển cơ sở dữ liệu. Điều đó sẽ khiến Drupal bỏ các khóa đi kèm với cơ sở dữ liệu đã nhập và chọn những khóa được chỉ định trong tệp cài đặt.


Có lẽ tôi đang thiếu điểm, nhưng làm thế nào điều này tốt hơn mã giả trong câu hỏi?
Randell

1
Quyền riêng tư, bảo mật, quản lý vi mô. Đặt cài đặt trong các tệp khác nhau cho phép các vai trò khác nhau (nhà phát triển cục bộ, sysadmin) có các quyền khác nhau đối với các tệp khác nhau. Một sysadmin cũng có thể từ chối khả năng hiển thị đối với cài đặt prod / qa / dev bằng đề xuất của tôi, trong khi nhà phát triển cục bộ sẽ luôn giữ lại cài đặt cục bộ của mình. Việc làm rối tung mọi thứ cũng khó khăn hơn, với cách tiếp cận 'tất cả mọi thứ trong một tệp', việc làm rối tất cả các môi trường của bạn cùng một lúc sẽ dễ dàng hơn. Với đề xuất của tôi, bạn thậm chí còn thiết lập để có các mô-đun khác nhau hiện diện và được bật trên mỗi trang web.
barista nghiệp dư

0

Bạn cũng có thể sử dụng các mô-đun Môi trường cho phép bạn sử dụng các mô-đun khác nhau cho mỗi môi trường.

Hướng dẫn

Trước tiên, bạn cần phải thiết lập các trang dev / staging / sản xuất của mình với cài đặt duy nhất của riêng họ.php (một mẫu phổ biến cho việc này là yêu cầu settings.local.php từ settings.php). Nếu bạn không có loại thiết lập này, thì bạn không cần mô-đun này.

Đối với dàn / dev, hãy thêm một cái gì đó như thế này vào settings.php, khi môi trường_modules được bật, các mô-đun này cũng sẽ được bật.

Ví dụ

$conf['environment_modules'] = array(
  'devel' => 'sites/all/modules/devel/devel.module',
);

Bạn cũng có thể sử dụng một settings.php bằng cách sử dụng ví dụ sau:

$env = $_ENV['AH_SITE_ENVIRONMENT']; // Acquia way: environment name
$env = $_SERVER['SERVER_NAME']; // or your server name, or whatever
$envModules = array(
    'default' => array( // By default it is development environment
      'devel' => 'sites/all/modules/contrib/devel/devel.module',
      'coder_review' => 'sites/all/modules/contrib/coder/coder_review/coder_review.module',
    ),
    'dev' => array(
      'devel' => 'profiles/mp_singapore/modules/devel/devel.module',
      'coder_review' => 'sites/all/modules/contrib/coder/coder_review/coder_review.module',
    ),
    'test' => array(
      'diff' => 'sites/all/modules/contrib/diff/diff.module',
    ),
    'prod' => array(
      'diff' => 'sites/all/modules/contrib/diff/diff.module',
    ),
);
$conf['environment_modules'] = $envModules[$env] ?: $envModules['default'];
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.