使用Laravel 4.2进行多站点设置

时间:2015-07-02 10:43:52

标签: php laravel config

我有一个有趣的问题,社区可能想要深入了解并提供帮助。我有一个自定义论坛软件。称之为A.现在,我打算推出不同版本的,称之为B和C.但需要注意以下几点。

a)他们必须保持同步。 A,B和C自然是独立的存储库。

b)代码相同,但目标市场不同。说游戏和食物。

c)我的想法是使用3个不同的配置文件,并在Laravel Forge上使用环境变量。

我相信有人可以更好地解决这个问题。我不知道这将如何在localhost和生产上发挥作用。我需要听听以前有过经历的人的故事,以及推荐的做法。

为了了解我的情况,我试图在文件夹/ config / multi-site中创建3个配置文件,并将它们命名为a.php,b.php,c.php。除此之外,我感到愚蠢,因为我不知道如何在论坛的特定版本运行时启动这些配置文件。另外,如何使用Github将回购B和C与A同步?

1 个答案:

答案 0 :(得分:1)

我认为没有真正的“完美”答案,这取决于你想要什么以及你想在哪里处理问题。

单独的存储库

如果您使用单独的存储库,请确保同步数据库和迁移以及某些内容(例如,应该可用于所有站点的特定变量/值)。这一点令我感到头疼。

您可以在

中的文件中设置环境内容
app/config/

然后通过环境检测选择合适的一个,具体取决于您的网站? http://laravel.com/docs/4.2/configuration#environment-configuration

  

如果您需要更灵活的环境检测,可以将Closure传递给detectEnvironment方法,允许您按照自己的意愿实现环境检测:

$env = $app->detectEnvironment(function()
{
    return $_SERVER['MY_LARAVEL_ENV'];
});

然后根据你可以调用相应的配置文件。

每个网站的一个仓库中有一组不同的文件(本地,登台,实时),或者一个仓库中的所有文件(site1-local,site1-staging,site1-live,site2-local ......)

但是还没有测试过。

一个代码库+一个数据库

另一个选项是(我最后做的)使用相同的代码库并拥有一个数据库,然后根据访问的域,将显示特定的数据。因此,在许多数据库表中,您必须将“site_id”作为列。当您搜索用户而不是

User::where('name', 'Jeffrey')->get();

就像是

User::where('site_id', Site::GetThisId())->where('name', 'Jeffrey')->get();

GetThisId()检查环境/域并返回正确的id。

你绝对可以让它更高效,代码更不容易出错(例如用User :: where覆盖User :: get()('site_id',Site :: thisId()) - > get ()左右)。

这种方式对我来说效果很好,因为我只有一个代码库,一个数据库和一个服务器,我不需要确保所有代码库和数据库都已同步。也许有些人可能认为不那么优雅,但它有助于快速创建新网站。

问题是你分开的地方

所以实际的问题是你想要“分离”网站的地方。你想要他们在单独的repos /服务器上,每个人都有相同的配置但不同的内容?或者每个站点有一个repo但不同的配置文件集?或者一切都相同,但使用id来分隔数据库级别的数据。

这对你的问题有帮助吗?