我刚刚开始使用Symfony。
我正在使用Git / github来管理我的项目。我为log和cache设置了两个忽略,这很好。
我现在需要建立一个生产网站。在这个小项目中,我在同一台服务器上开发和生产,但具有不同的文件位置和数据库。
e.g。
www.example.com/mysymfonyproject_dev/ < development area
&
www.example.com/mysymfonyproject/ < Live / Production site
在服务器上/homes/sites/example.com/www/mysymfonyproject_dev
&amp; /home/sites/example.com/www/mysymfonyproject
所以现在我已将我的项目克隆到新的生产文件夹
它当然会忽略日志和缓存文件夹,但现在我需要更改database.yml
文件以及更多可能使生产区域正常工作。
处理此问题的最佳方法是什么?
是否有一些我应该添加到.gitignore
的其他文件可以说明此网站的版本,例如开发或生产。
OR还有其他方法可以使用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 }
我认为在您可能配置主机文件的本地计算机上使用$ _SERVER ['SERVER_NAME']会更好,例如mysymfonyproject.local只是添加到索引文件,然后git存储库是ffine,所有文件都是可移植的。
答案 0 :(得分:6)
由于您更新了问题,我可以向您提供一些相关信息。
如您所知,您在symfony中有一个级联配置系统,它允许您的dev和prod环境使用不同的参数,例如您的数据库连接(以及许多其他内容)。
至于部署,symfony附带了一个利用rsync进行部署的任务。一般来说,你不需要调整它,它默认不会部署任何“dev”前端控制器,因此它适合大多数基本需求。请注意,即使部署脚本应排除dev前端控制器完全部署,e 如果您要部署它们,默认情况下它们只有一个小的安全检查,只允许从localhost访问。如果需要从部署中排除其他文件,可以编辑config / rsync_exclude.txt
但值得注意的是,此部署脚本不处理数据库部署。你应该手动完成。如果您需要将数据库更改部署到现有数据库,您也可以执行该手册,或查看Doctrine Migrations(假设您使用Doctrine)。
更新:您可以为不同的应用和/或环境设置一个前端控制器(index.php)。您可以检查主机名或其他内容,但我找到并使用的最简洁的解决方案是设置Apache环境变量。在我的Vhost配置中,我会这样做:
<VirtualHost *:80>
Servername www.myproject.dev
...
SetEnv SYMFONY_APP frontend
SetEnv SYMFONY_ENV dev
SetEnv SYMFONY_DEBUG 1
</VirtualHost>
请注意,对于每个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();
通过这个设置,我可以从我的存储库中删除frontend_dev.php和除index.php之外的任何其他前端控制器。
答案 1 :(得分:0)
在生产服务器上,最佳做法是:
但是在你的情况下,很可能没有预生产环境,并且访问权限不是问题,Git可能有意义。
在这种情况下,我建议通过将实际值保留在VCS存储库之外来处理配置文件。
然后,您可以利用内容过滤器,在结帐时构建actual database.yml values
“污迹”脚本(在您的仓库的.gitattributes
文件部分中声明)可以检测它在哪个环境中执行,并选择适当的源以获得构建文件的正确值。
有关详细信息,请参阅“Git Config excludesfile for just a branch”。