Settings.php - Local Dev,Development Server,Live Server的建议 -- workflows 领域 和 configuration 领域 和 staging 领域 drupal 相关 的问题

Suggestions for settings.php - Local dev, Development server, Live server


80
vote

问题

中文

基本上,有史以来最大的问题之一:您在开发/登台工作流程中使用Settings.php的某种方式是什么?

现在,我有我的settings.php文件设置如下,我将我的开发基于服务器的$ host指令 - 含义我可以在dev.example.com上为开发(共享)服务器工作, local.example.com为我的本地计算机(以及其他开发的本地代码结帐),以及Live Site的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: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;  } ?>   

这适用于大多数目的,但这意味着我们有很多坐在我们的共享设置中的无关代码.php文件......有更好的方法吗?

英文原文

Basically, one of the greatest questions of all time: What are some ways you're using settings.php in your development/staging workflow?

Right now, I have my settings.php file set up like the following, and I base my development on the server's $HOST directivexe2x80x94meaning I can work on dev.example.com for the development (shared) server, local.example.com for my local computer (and other dev's local code checkouts), and www.example.com (or just example.com) for the live site.

(This code is in the 'Database settings' section of 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: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;  } ?> 

This works pretty well for most purposes, but it means we have a lot of extraneous code sitting around in our shared settings.php file... is there a better way?

        
 
 

回答列表

66
 
vote
vote
最佳答案
 

我所做的是将该文件分成settings.php和local.settings.php。

在Settings.php的末尾是以下代码:

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

然后将本地文件排除在您使用的任何VC中。优点是您可以将在Settings.php中的所有实例汇总的设置,并具有自动版本的/分布式,并将本地内容保存在Local.settings.php中。

 

What I do is separating that file into a settings.php and a local.settings.php.

At the end of settings.php is the following code:

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

The local file is then excluded from whatever VCS you are using. The advantage is that you can put settings which are common over all instances in settings.php and have that versioned/distributed automatically and keep the local stuff in local.settings.php.

 
 
         
         
25
 
vote

这似乎是您正在重新发明的Drupal内置的多函数。

亲自,我将站点的所有标准主题和模块保留在 99887661 中,然后具有 sites/dev.example.com sites/example.com 。

作为一个额外的奖金,您可以为每个站点带来不同的 99887664 文件夹,也可以将任何开发模块添加到 99887665

 

This seems like you're reinventing Drupal's built in multisite functionality.

Personally, I keep all standard themes and modules for the site in sites/all, and then have sites/dev.example.com and sites/example.com.

As an added bonus you can then have different files folders for each site, and you can add any development modules to sites/dev.example.com/modules as well.

 
 
         
         
10
 
vote

我宁愿本地忽略文件(使用git中的 .gitignore 文件),然后在每个主机上的文件保持单独的版本。

 

I prefer to ignore the file locally (using a .gitignore file in git) and then keep separate versions if the file on each host.

 
 
       
       
6
 
vote

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

  dev.example.com staging.example.com   

  example.com   

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

 

I tend to always set up DNS or host file entries and use

dev.example.com staging.example.com 

and

example.com 

Then I have completely separate settings file directories with differing files directories. For instance ./sites/dev.example.com/files

 
 
     
     
5
 
vote

为什么不基于开发主机名的文件夹?

示例

  • 站点/ dev1.domain.com
  • 站点/ dev2.domain.com
  • 站点/ dev3.domain.com
  • 网站/ www.domain.com

每个设置文件和db_url。

 

Why not have a few folders based on the development host name?

Example

  • sites/dev1.domain.com
  • sites/dev2.domain.com
  • sites/dev3.domain.com
  • sites/www.domain.com

Each with their own settings file and db_url.

 
 
     
     
2
 
vote

如果更改的唯一事情是数据库凭据,则可以在本地(和暂存/制作)虚拟主机配置中或在Web Root上方的文件夹中设置环境变量。这是一个简单的例子:

/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']}";

这使得多个开发人员在本地运行东西,您可以在仍然跟踪Settings.php(那里有更多的东西,而是只有数据库凭据......)就可以推送到暂存/生产。您也不必跟踪多个设置。

 

If the only things changing are the database credentials, then you can set environment variables in your local (and staging/production) virtual host config or in a .htaccess a folder above your web root. Here's a simple example:

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

I can then create a .htaccess file here:

/var/www/example.com/.htaccess

which has the following code:

SetEnv DB1_USER my_local_user SetEnv DB1_PASS my_local_pass SetEnv DB1_HOST my_local_host SetEnv DB1_NAME my_local_dbname 

Then in /var/www/example.com/drupal-resides-here/sites/default/settings.php (or whatever) you can grab the db credentials like:

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

This lets multiple developers run things locally and you can push to staging / production while still tracking settings.php (there are more things in there than just the database credentials...). You also wouldn't have to keep track of multiple settings.php files.

 
 
     
     
0
 
vote

简单,最有效的解决方案只是一行是下面的。只需将其包含在Settings.php文件的最后一行中:

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

前面的@符号只是意味着即使它没有找到该文件,也不会显示任何错误。典型设置类似,这涉及有条件检查文件是否存在。这在没有它的情况下在一行中完成它。

http://php.net/manual/en/language.operators。 errorcontrol.php

又称 stfu php运算符

 

Simplest and most efficient solution that is just one line is the following. Just include it in the last line of your settings.php file:

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

The @ symbol in the front just means don't display any error even if it doesnt find that file. Typical setup's like this involve a conditional to check if the file is there. This accomplishes it in one line without it.

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

Also known as the STFU PHP operator.

 
 
 
 

相关问题

1  如何控制用户生成的内容已发布状态?  ( How do i control user generated contents published state ) 
我想允许用户将内容提交到我的网站,但内容必须首先批准,然后可以发布。 有人告诉我写一个模块,但我不知道要关注哪个步骤。 让当前用户看到他发布的内容,仍未获得批准。 此外,创建一个表单以允许当前用户编辑节点。 有谁知道如何编写此类模块? ...

0  如何设置工作流模块?  ( How do i set up the workflow module ) 
我的网站有一个管理员角色(编辑器),我希望允许匿名用户在我的网站中提交文章;他们创建的节点必须通过编辑用户批准,然后再发布。 我被告知使用工作流模块;我安装了模块,并设置了它,但我没有获得我想要的。 这些是我跟随的步骤: 我创建了一个名为"testStory" 的工作流,并添加了"批准" 状态,该状态仅适用于"故事...

1  Node_Access GID,角色和工作流之间的关系  ( Relationship between node access gid roles and workflow ) 
如果使用工作流程,什么数据库表.Field是node_access.gid映射到?它是否表示角色,它是否表示工作流SID(状态ID),或者其他东西? 示例: +---------+------+-----------------+------------+--------------+--------------...

1  有机团体和工作流程  ( Organic groups and workflow ) 
如何为每个有机组为"文章" 等内容类型创建分隔工作流程? 例如: "数学集团" 有角色"作者" ,"头。" "文章" 用户创建的"作者" 角色在"数学组" 中创建的节点将仅由具有角色"头部" 的用户可见。 具有"head" 角色的用户将审查"文章" 节点,然后发布它或将其发送回"作者" 以进行改进。 如何使用 ...

1  CCK字段在工作流标签中  ( Cck field in workflow tab ) 
我想将用户参考字段添加到"工作流" 选项卡。 目前我们有一个用户参考cck字段,但它只能在节点编辑表单中编辑。真的,能够通过工作流标签将内容"分配给所有者来说,它会更有意义。 关于什么可能是一个好地方的建议?现有模块/模板功能等? ...

2  工作流程无法正常工作  ( Workflow does not work correctly ) 
我为内容类型"文章" 创建了一个工作流程: 创造 - >草案 草案 - >专家评论 专家评论 - >头评 头评 - >发布 当作者创建文章节点时,并将其发送给"专家评论" ,他们仍然可以查看和编辑节点但"专家评论" 无法查看节点。 是工作流程的错误或技巧? ...

3  如何仅列出视图中所有节点的最新版本?  ( How to list only the latest revision of all nodes in a view ) 
我目前有一个view,列出了所有节点,这是我们对内容仪表板的使用。它显示最近更新的节点,他们的工作流状态和其他一些细节。 我们似乎拥有的问题是,我们使用的修改,每次用户更新节点时,我们都会创建新的待处理版本。当用户更新节点时,工作流状态(自定义CCK字段)会自动切换到 repysid 。由于当前已发布的节点具有工作流...

0  如何将字段添加到显示发布节点的用户的视图中?  ( How do i add a field to a view that shows the user that published the node ) 
我正在使用Drupal 6.22和模块修订,为创建新节点创建批准过程。 "作者" 用户角色可以创建内容的初始草稿,"主持人" 用户角色必须登录以查看和批准。一旦主持人批准内容,他们可能会发布它。 修订不允许轻松的机制显示发布内容的特定用户(用户角色"主持人" )。根据这个问题,模块的维护者不会构建该功能: http:...

1  如何仅在节点符合特定条件时显示块?  ( How can i display a block only when a node meets a particular condition ) 
我有一个块,允许网站访问者查询外部日历,但它只适用于某些节点。 如何设置它,以便我可以)指示节点是否具有可用于节点的日历数据和II)如果它具有可用日历数据,则显示块,如果它没有日历数据可用,块未显示? 我建议我使用工作流程来做这件事,但我无法弄清楚工作流程如何帮助我设置这个。 ...

0  仅创建规则到仅有合并角色的人发电  ( Create rule to e mail only someone who has combined roles ) 
这是用于Drupal 6安装。 在规则中,有一个if语句可用的"如果用户具有角色" ,这可以设置为"和" 语句或"或" 语句。 在do中是一个选项,可以将电子邮件发送给选定角色的每个人。 我想将"如果用户有角色" 的选择器,使用"和" 部分与发送电子邮件的执行电子邮件到所选角色的每个人。 该网站目前正在使用工作流程...

2  改善多语言网站的工作流程  ( Improve workflow for multi lingual site ) 
我的客户在Drupal 7中管理多语言内容的可怕时间。我正在使用国际化模块和Drupal 7在管理多种语言中的默认功能。以下是我的客户端执行的示例工作流,粗体语句表示挑战。 客户端开始添加内容类型页面的新内容。他填写了标题并选择语言作为英语。 客户端点击菜单设置,然后选择提供菜单链接。在父项下,客户端从下拉树中选择...

0  admin的节点设置为默认发布?  ( Admins node set to published by default ) 
我当前有一个节点设置为默认情况下未发布,因为我想在发布它的生活之前批准用户提交的内容。但是,管理员应该默认发布的节点。我怎样才能完成这个? ...

2  实时工作流程预定的转换?  ( Real time workflow scheduled transitions ) 
我有一个简单的工作流程,我试图找出工作流程调度程序的方法,以便在他们的预定时间实时更改节点状态。 我在节点上设置了在09:00的节点上发生的状态更改为live。 如果Cron在09:00之前运行,则该状态不会在下次Cron运行之前改变。 如果下次Cron运行直到11:00 AM,则在11:00之前不会发生状态更改。...

4  内容发布工作流程模块  ( Module for content publication workflow ) 
我正在寻找一个Drupal 7模块来管理不同角色的内容发布工作流程。当具有某个角色的用户创建内容节点时,需要在另一个角色中被另一个用户验证,然后在标记为已发布之前。在Drupal 6中,我使用了工作流模块,但它不适用于Drupal 7. ...

2  我需要一个Drupal工作流解决方案,在那里我可以编辑直播/发布节点并保存,而无需进行即将到达的编辑  ( I need a drupal workflow solution where i can edit live published nodes and save ) 
我需要一个模块或方法,可以允许发布的节点在admin中编辑并保存,而不会导致更改,直到它提交。 网站示例: http://bit.ly/p70f7e 1. User with EDIT permission logs in and edits this page/node - They make a copy...

1  更改工作流访问权限的挂钩是什么?  ( What is the hook to alter workflow access permissions ) 
在工作流模块中,如何以编程方式更改权限?除了Coles外,我想检查Proflie值以允许或不允许用户在特定工作流状态中看到或编辑节点。 ...

0  仅在节点批准时创建分类术语?  ( Only create taxonomy terms on node approval ) 
现在我的网站上的节点默认未发布,因为我想手动批准用户提交的内容。如何使用户提交的分类术语未创建,直到我手动批准相应的节点? ...

1  我应该如何为此内容模型设置修订?  ( How should i set up revisions for this content model ) 
我需要管理一个政府策略文件库(PDF / DOC和METADATA),使得对于给定的文档,用户可以在几个编辑中更改其任何字段(包括附加文件和标题),然后是标记它作为一个新的"修订版" (来自所有过去修订的值永久存储)。 只有管​​理员将在Drupal中看到/编辑此数据:另一个PHP框架将直接查询Drupal的DB以进...

1  设置暂存服务器工作流程(适用于相对初学者)  ( Setting up a staging server workflow for a relative beginner ) 
我正在使用Drupal 6项目,并希望设置一个简单的暂存/直播服务器工作流程。 我知道Drupal很好,包括功能模块,而且对Git相对熟悉;至于服务器本身,我只获得了FTP访问权限。我也有兴趣听取基于SSH的解决方案。 任何人都可以推荐合适的工作流程,或者建议我应该考虑什么,如果我必须开发自己的工作流程? ...

3  如何对节点进行多用户批准? [关闭]  ( How can i require multi user approval for a node ) 
关闭。这个问题需要更多聚焦。它目前不接受答案。 想要改进这个问题?更新问题,以便仅通过编辑此帖子。 关闭 6年前。 ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.