1

Drupal 会出现此问题,但可归因于一般的 Apache - PHP 配置。在我的配置文件中,我正在确定服务器变量要使用哪个数据库。

if($_SERVER['ENV'] == 'development') {
//Use connection A
} else {
//Use connection B
}

在 apache 中,我像这样设置环境:

<VirtualHost *:80>
//Other normal Apache variables set
SetEnv ENV development
</VirtualHost>

在我的正常网站设置中,通过网络服务器访问 PHP,这可以很好地工作。但我正在尝试使用命令行上的 drush 运行命令,它总是连接到错误的数据库。问题真的是命令行 php 总是连接到连接 B,我认为它不一定是 drush。

如何将 ENV 设置为同时在 apache 和命令行上工作?操作系统是 ubuntu。

4

3 回答 3

1

Drush 不使用 Apache 来运行命令,而是直接加载和运行 PHP 文件。要在服务器上全局设置变量,您可以编辑/etc/environment和添加

ENV=development

您可以阅读有关在 Ubuntu 中设置环境变量的更多信息,请查看此帮助文章

于 2013-02-25T04:23:53.040 回答
1

--uri 开关将通知 Drush 在运行时未设置 HTTP_HOST 的情况下使用哪个域。

例子:drush --uri=http://uri-to-development cc all

您可以将其添加到每台机器上的 drushrc 中,这样您就不必每次都键入它。

于 2014-05-12T16:13:48.013 回答
0

笼统的回答,

Apache 有自己的环境与命令行 ENV(运行export以查看差异)。Apache 还包括仅对 Web 服务器有意义的标头/ENV 变量(例如HTTP_REFERER& ),这些通过命令行是无意义的(定期使用 shell 时DOCUMENT_ROOT您实际上没有)DOCUMENT_ROOT

在我看来,问题开始SetEnv于您在 Apache 配置中添加一些变量时,当您通过命令行测试文件时还需要包括这些变量(例如自定义PATH(s)等..或LD_LIBRARY_PATHOracle 即... )

更大的问题是有时你可以SetEnv在你的变量some-local-websiteX.conf和一些SetEnv被定义在全局下httpd.conf

所以我通常这样做

1. 打印 Apache 正在使用的 ENV 变量

在我的文档根目录中,我添加了这个小脚本(它在 Python 中,但您可以调整它以在 PHP 中执行相同的操作)

File: www/env.cgi

#!/usr/bin/python

print "Content-Type: text/html; charset=utf-8\n"


import os
for e in os.environ:
    print "export {key}='{value}' <br />".format(key=e, value=os.environ[e])

2. 创建自定义 bash env 文件

然后我将浏览器中的输出复制粘贴到本地文件~/.bash_apache_env

3. 通过命令行运行我的网站

每个终端窗口都会将环境重置为默认值(除非你的~/.bashrie ofc 中有一些设置),所以我在我需要的每个窗口中运行以下命令。

source ~/.bash_apache_env

# then I can execute
www/index.cgi
www/admin.cgi

# etc ..

#1 & #2 通常只是一次性的

希望能帮助到你...

于 2016-06-16T09:28:56.797 回答