Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我要使用环境变量来配置Symfony应用程序?_Php_Symfony_Deployment_Environment Variables - Fatal编程技术网

Php 为什么我要使用环境变量来配置Symfony应用程序?

Php 为什么我要使用环境变量来配置Symfony应用程序?,php,symfony,deployment,environment-variables,Php,Symfony,Deployment,Environment Variables,昨天是我第一次使用Symfony 4在自己的服务器上进行部署。在阅读有关部署的文章时,我引用: 大多数Symfony应用程序从环境中读取其配置 变量。在本地开发时,通常将这些存储在 .env文件。但在生产过程中,不是创建此文件,而是 应该设置真实的环境变量 现在,由于我在多个网站上读到这是生产中正确的工作方式,我对此有几点怀疑: 生产中环境变量的含义是什么?为什么不把变量放在Wordpress、Django等文件中呢 为什么我希望在全局OS变量中具有项目数据库的凭据 作为操作系统中的全局性和可

昨天是我第一次使用Symfony 4在自己的服务器上进行部署。在阅读有关部署的文章时,我引用:

大多数Symfony应用程序从环境中读取其配置 变量。在本地开发时,通常将这些存储在 .env文件。但在生产过程中,不是创建此文件,而是 应该设置真实的环境变量

现在,由于我在多个网站上读到这是生产中正确的工作方式,我对此有几点怀疑:

  • 生产中环境变量的含义是什么?为什么不把变量放在Wordpress、Django等文件中呢
  • 为什么我希望在全局OS变量中具有项目数据库的凭据
  • 作为操作系统中的全局性和可访问性,如果我有多个项目具有相同的环境变量(例如,Symfony中的
    APP_env
    ),更改其值将影响我的所有项目!这有什么意义吗
如果有人能对这个问题稍加说明,我将不胜感激


对不起,我的英语不太好

这个问题不太适合这样做,但简而言之:环境变量可以为任何环境设置,而不仅仅是操作系统。例如,像您的web服务器。我在
/etc/httpd/conf.d/variables.conf
中有以下内容,这些内容包含在我的主Apache配置中的某些虚拟主机中:

#Config for web apps
SetEnv DB_CONNECTION      "mysql"
SetEnv DB_HOST            "192.168.242.1"
SetEnv DB_USERNAME        "dbuser"
SetEnv DB_PASSWORD        "dbpass"
SetEnv DB_DATABASE        "dbname"

可以使用权限保护此文件,以确保只有web服务器本身可以读取这些文件。如果我有多个应用程序或虚拟主机,我可以有多个文件。

这个问题不太适合这样做,但简而言之:环境变量可以为任何环境设置,而不仅仅是操作系统。例如,像您的web服务器。我在
/etc/httpd/conf.d/variables.conf
中有以下内容,这些内容包含在我的主Apache配置中的某些虚拟主机中:

#Config for web apps
SetEnv DB_CONNECTION      "mysql"
SetEnv DB_HOST            "192.168.242.1"
SetEnv DB_USERNAME        "dbuser"
SetEnv DB_PASSWORD        "dbpass"
SetEnv DB_DATABASE        "dbname"
可以使用权限保护此文件,以确保只有web服务器本身可以读取这些文件。如果我有多个应用程序或虚拟主机,我可以有多个文件

生产中环境变量的含义是什么?为什么不呢? 把变量放在像Wordpress、Django等文件中就行了吗

首先要了解的是有多少不同的环境可以运行您的代码。您可以拥有生产、登台、测试和本地环境。由于冲突而无法同步到您的VCS回购协议的每个服务器上都有完全不同的配置文件,这真的有意义吗

在Symfony和其他框架中仍然有配置文件。但是,某些设置依赖于环境,而其他设置则不依赖于环境。依赖于环境的变量可以从环境变量中设置。通过这种方式,您可以同步配置文件,但仍保持特定于环境的设置


环境变量不一定是全球性的,这一事实可以解释你其余的担忧。Web服务器可以在各种上下文中定义环境变量,如miken32所建议的在特定虚拟主机中使用SetEnv

生产中环境变量的含义是什么?为什么不呢? 把变量放在像Wordpress、Django等文件中就行了吗

首先要了解的是有多少不同的环境可以运行您的代码。您可以拥有生产、登台、测试和本地环境。由于冲突而无法同步到您的VCS回购协议的每个服务器上都有完全不同的配置文件,这真的有意义吗

在Symfony和其他框架中仍然有配置文件。但是,某些设置依赖于环境,而其他设置则不依赖于环境。依赖于环境的变量可以从环境变量中设置。通过这种方式,您可以同步配置文件,但仍保持特定于环境的设置


环境变量不一定是全球性的,这一事实可以解释你其余的担忧。Web服务器可以在各种上下文中定义环境变量,如miken32所建议的在特定虚拟主机中使用SetEnv

生产中环境变量的含义是什么?为什么不把变量放在Wordpress、Django等文件中呢

  • 环境变量是当您将应用程序从一台服务器移动到另一台服务器时发生变化(且仅发生变化)的值

  • 这些是该服务器或该集群特有的值,例如服务器的主机名或用于连接数据库的主机名/IP

您可以将这些更改的值组合在一起,以便当您部署到不同的环境/不同的服务器组(如测试环境、暂存环境/生产环境)时,您的应用程序会自动进行调整

为什么我希望我的项目数据库的凭据位于 全局操作系统变量

如前所述,还有其他设置方法。例如在Web服务器中,或者仅在Web服务器的虚拟块中

如果我有更多的话,我将成为操作系统中所有人都可以访问的全局用户 多个项目具有相同的环境变量(例如,中的APP_env Symfony),更改其值将影响我的所有项目!是吗 有什么意义吗

是的,因为通常如果服务器被标记为“测试环境”或“UAT环境”,那么您在那里部署的所有东西都应该表现相同(特别是如果它是生产服务器)

只是这样组织部署和服务器比为每台服务器提供混合用途更容易管理

生产中环境变量的含义是什么?为什么不把变量放在Wordpress、Django等文件中呢

  • 环境变量为val