Git Symfony 1.4最佳实践制作和;开发配置

Git Symfony 1.4最佳实践制作和;开发配置,git,deployment,symfony1,doctrine,Git,Deployment,Symfony1,Doctrine,我才刚开始学Symfony 我使用Git/github作为管理项目的一种方式。我为日志和缓存设置了两个忽略,这很好 我现在需要建立一个生产基地。目前,在这个小项目中,我在同一台服务器上进行开发和生产,但使用不同的文件位置和数据库 e、 g 我认为在本地计算机上使用$\u SERVER['SERVER\u NAME']会更好,在本地计算机上,您可以配置主机文件,例如mysymfonyproject.local,只需添加到索引文件中,git存储库就是ffine,所有文件都是可移植的。在生产服务器上,

我才刚开始学Symfony

我使用Git/github作为管理项目的一种方式。我为日志和缓存设置了两个忽略,这很好

我现在需要建立一个生产基地。目前,在这个小项目中,我在同一台服务器上进行开发和生产,但使用不同的文件位置和数据库

e、 g


我认为在本地计算机上使用$\u SERVER['SERVER\u NAME']会更好,在本地计算机上,您可以配置主机文件,例如mysymfonyproject.local,只需添加到索引文件中,git存储库就是ffine,所有文件都是可移植的。

在生产服务器上,最佳做法是:

  • 除了在prod中运行应用程序绝对需要的工具外,不要使用任何其他工具
  • 在预生产环境中准备部署的产品,其访问权限比产品环境更开放
但在您的情况下,可能没有预生产环境,访问权限也不是什么问题,Git可能是有意义的

在这种情况下,我建议通过将实际值保留在VCS存储库之外来处理配置文件

然后,您可以利用内容过滤器,以便在签出时构建。
“涂抹”脚本(在repo的
.gittributes
文件部分声明)可以检测它在哪个环境中执行,并选择适当的源以获得用于构建文件的正确值。

有关更多详细信息,请参见“”。

由于您更新了问题,我可以为您提供一些相关信息

正如您现在所知,symfony中有一个级联配置系统,它允许不同的参数,例如dev和prod环境的数据库连接(以及其他许多参数)

至于部署,symfony附带了一个利用rsync进行部署的任务。一般来说,您不需要对其进行太多调整,默认情况下,它不会部署任何“dev”前端控制器,因此它适合最基本的需求。请注意,即使部署脚本应该从部署中排除dev前端控制器,e 即使您要部署它们,默认情况下它们也有一个小的安全检查,只允许从本地主机进行访问。如果需要从部署中排除其他文件,可以编辑config/rsync_exclude.txt

此处部署的详细信息:

但值得注意的是,此部署脚本不处理数据库部署。您应该手动执行此操作。如果您需要将数据库更改部署到现有数据库,您还可以执行该手册,或者查看条令迁移(假设您使用条令)

更新:您可以为不同的应用程序和/或环境使用一个前端控制器(index.php)。您可以检查主机名或其他内容,但我找到并使用的最干净的解决方案是设置Apache环境变量。在Vhost配置中,我将执行以下操作:

<VirtualHost *:80>
  Servername www.myproject.dev
  ...
  SetEnv SYMFONY_APP frontend
  SetEnv SYMFONY_ENV dev
  SetEnv SYMFONY_DEBUG 1
</VirtualHost>

服务器名www.myproject.dev
...
SetEnv SYMFONY_应用程序前端
SetEnv SYMFONY_环境开发
SetEnv SYMFONY_调试1
请注意,对于每个应用程序/环境组合,我当然会有一个单独的Vhost。您不应该部署vhost配置,因此通常只需要在每个主机上设置一次。我修改后的index.php如下所示:

<?php

require_once dirname(__FILE__) . '/../config/ProjectConfiguration.class.php';

$app = isset($_SERVER['SYMFONY_APP']) ? $_SERVER['SYMFONY_APP'] : 'frontend';
$env = isset($_SERVER['SYMFONY_ENV']) ? $_SERVER['SYMFONY_ENV'] : 'prod';
$debug = isset($_SERVER['SYMFONY_DEBUG']) ? $_SERVER['SYMFONY_DEBUG'] : false;

$configuration = ProjectConfiguration::getApplicationConfiguration($app, $env, $debug);
sfContext::createInstance($configuration)->dispatch();

Symfony具有环境意识,为什么您不在Symfony配置文件中设置环境?我当然可以,这就是为什么我要问的问题是如何做到这一点,以及根据我的设置,什么是最佳实践。您看过Symfony“入门”指南和“对Symfony的温和介绍”了吗?如果您遇到任何具体问题,我很乐意提供帮助,但您现在提出的问题在官方文件中已经解释得很清楚了。抱歉,也许我遗漏了一些东西,我承认我还没有完整地阅读,但在这两个简短的指南中,它在哪里解释了设置环境?谢谢,我想我的问题是在这种情况下如何使用git管理环境。此人说明了一个可能的黑客()。真的很难,我认为最好的选择是在index.php中编写一些条件,查看url并根据这些条件设置环境,例如localhost或example.com/mysymfonyproject_dev设置为“dev”,example.com/mysymfonyproject设置为“live”当然,dev和live的不同域可能比域中的文件夹更好。我不明白为什么您需要在Git中进行黑客攻击,或者您是否有多个配置不同的dev环境。也就是说,您确实可以更改index.php,我个人使用Apache环境变量来设置app/environment,请参阅我更新的响应。我非常喜欢您使用Apache环境变量的方式。谢谢,我想迪福会用这样的东西吗。是的,我有多个发展领域。本地mac适用于我,本地windows适用于其他开发人员,临时服务器和live。谢谢你的建议。
<VirtualHost *:80>
  Servername www.myproject.dev
  ...
  SetEnv SYMFONY_APP frontend
  SetEnv SYMFONY_ENV dev
  SetEnv SYMFONY_DEBUG 1
</VirtualHost>
<?php

require_once dirname(__FILE__) . '/../config/ProjectConfiguration.class.php';

$app = isset($_SERVER['SYMFONY_APP']) ? $_SERVER['SYMFONY_APP'] : 'frontend';
$env = isset($_SERVER['SYMFONY_ENV']) ? $_SERVER['SYMFONY_ENV'] : 'prod';
$debug = isset($_SERVER['SYMFONY_DEBUG']) ? $_SERVER['SYMFONY_DEBUG'] : false;

$configuration = ProjectConfiguration::getApplicationConfiguration($app, $env, $debug);
sfContext::createInstance($configuration)->dispatch();