Symfony 1.4最佳实践生产和开发配置

Der*_*gan 2 git deployment doctrine symfony1

我刚刚开始使用Symfony.

我正在使用Git/github来管理我的项目.我为log和cache设置了两个忽略,这很好.

我现在需要建立一个生产网站.在这个小项目中,我在同一台服务器上开发和生产,但具有不同的文件位置和数据库.

例如

www.example.com/mysymfonyproject_dev/  < development area
&
www.example.com/mysymfonyproject/      < Live / Production site
Run Code Online (Sandbox Code Playgroud)

在服务器上它/homes/sites/example.com/www/mysymfonyproject_dev&/home/sites/example.com/www/mysymfonyproject

所以现在我已将我的项目克隆到新的生产文件夹中.
它当然忽略了日志和缓存文件夹,但现在我需要更改database.yml文件以及更多可能使生产区域工作的文件.

处理这个问题的最佳方法是什么?
是否有一些我应该添加的文件.gitignore可以说明这个网站是什么版本,例如开发或生产.

或者有其他方法我可以使用git吗?

哪个是最佳做法?

您可以想象,每次我执行git push到我的生产站点时,我都不想更新database.yml文件.

更新:

我有一个开发环境.我正在寻找的是部署到生产的分步指南.我可以使用git来做这件事,但是例如我如何设置环境,以便在部署时所有设置都是正确的.我确实看到database.yml可以有不同的登台和制作设置,但我在哪里告诉symfony什么网站是什么?就像symfony如何知道www.example.com/kickboxing是生产和www.example.com/kickboxing_dev正在进行分段一样?

更新2:

最后,根据我的具体要求,这似乎运作良好.

1 <?php                                                                                                                          
2 
3 
4 require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
5 
6 $theurl = explode('/', $_SERVER['PHP_SELF']);
7 $mydir = $theurl[1];
8 
9 
10 if ($mydir == "mysymfonyproject")  //live
11 {
12     $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);
13     sfContext::createInstance($configuration)->dispatch();
14 }
15 else // dev 
16 {
17     $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'dev', true);
18     sfContext::createInstance($configuration)->dispatch();
19 }
Run Code Online (Sandbox Code Playgroud)

我认为使用$ _SERVER ['SERVER_NAME']在你可能配置你的主机文件的本地机器上会更好,例如mysymfonyproject.local只需添加到索引文件,git存储库就是ffine然后所有文件都是可移植的.

Ger*_*rry 6

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

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

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

有关部署的详细信息,请访问:http: //www.symfony-project.org/gentle-introduction/1_4/en/16-Application-Management-Tools#chapter_16_deploying_applications

但值得注意的是,此部署脚本不处理数据库部署.你应该手动完成.如果需要数据库更改部署到现有的数据库,你也可以这样做手工,或可考虑学说迁移(假设你使用Doctrine).

更新:您可以为不同的应用程序和/或环境设置单个前端控制器(index.php).您可以检查主机名或其他内容,但我找到并使用的最简洁的解决方案是设置Apache环境变量.在我的Vhost配置中,我会这样做:

<VirtualHost *:80>
  Servername www.myproject.dev
  ...
  SetEnv SYMFONY_APP frontend
  SetEnv SYMFONY_ENV dev
  SetEnv SYMFONY_DEBUG 1
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

请注意,对于每个app/env组合,我都会有一个单独的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();
Run Code Online (Sandbox Code Playgroud)

通过这个设置,我可以从我的存储库中删除frontend_dev.php和除index.php之外的任何其他前端控制器.