当前位置: 首页>>技术解读>>正文


settings.php的建议 – 本地开发,开发服务器,实时服务器

webfans 技术解读 , , , 去评论

问题描述

基本上,有史以来最大的问题之一:您在开发/暂存工作流程中使用settings.php有哪些方法?

现在,我将settings.php文件设置如下,我将我的开发基于服务器的$ HOST指令 – 这意味着我可以在dev.example.com上使用开发(共享)服务器local.example。 com用于本地计算机(以及其他开发人员的本地代码检出),以及www.example.com(或仅限example.com)用于实时站点。

(此代码位于settings.php的’Database settings’部分):

$host = $_SERVER['HTTP_HOST'];
$base_url = 'http://'.$host;
$cookie_domain = $host;

switch($host) {
  case 'example.com': # Production server
    $db_url = 'mysqli://prod_sql_user:password@127.0.0.1/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:password@127.0.0.1/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:password@127.0.0.1/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.comsites/example.com

作为额外的奖励,您可以为每个站点提供不同的files文件夹,您也可以将任何开发模块添加到sites/dev.example.com/modules

第三种解决方案

我更喜欢在本地忽略该文件(在git中使用.gitignore文件),然后在每个主机上保留单独的版本文件。

第四种方案

我倾向于始终设置DNS或主机文件条目并使用

dev.example.com
staging.example.com

example.com

然后我有完全独立的设置文件目录与不同的文件目录。例如./sites/dev.example.com/files

第五种方案

为什么不根据开发主机名有几个文件夹?

  • 网站/dev1.domain.com

  • 网站/dev2.domain.com

  • 网站/dev3.domain.com

  • 网站/www.domain.com

每个都有自己的设置文件和db_url。

第六种方案

如果唯一更改的是数据库凭据,则可以在本地(和登台/生产)虚拟主机配置或.htaccess Web根目录上方的文件夹中设置环境变量。这是一个简单的例子:

/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_url = "mysql://{$_SERVER['DB1_USER']}:{$_SERVER['DB1_PASS']}@{$_SERVER['DB1_HOST']}:{$_SERVER['DB1_PORT']}/{$_SERVER['DB1_NAME']}";

这允许多个开发人员在本地运行事物,您可以在仍然跟踪settings.php的同时推送到暂存/生产(其中有更多的东西,而不仅仅是数据库凭据……)。您也不必跟踪多个settings.php文件。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2052.html,转载请务必附带本地址声明。