Laravel 4.2 的多站点设置

Multisite setup with Laravel 4.2

我有一个有趣的问题,社区可能希望参与进来并提供帮助。我有一个自定义论坛软件。称它为 A。现在,我打算推出它的不同版本,称它们为 B 和 C。但注意事项如下。

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

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

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

我相信有人对此有更好的解决方案。我不知道这将如何在本地主机和生产环境中发挥作用。我需要听听有过经验的人的故事,推荐的方法是什么。

为了了解我的情况,我尝试在文件夹 /config/multi-site 中创建 3 个配置文件并将它们命名为 a.php、b.php、c.php。除此之外,我觉得很笨,因为我不知道如何在特定版本的论坛是运行时启动这些配置文件。另外,如何使用 Github?

将回购 B 和 C 与 A 同步

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

独立存储库

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

您可以在

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

然后通过环境检测根据您的站点选择合适的? http://laravel.com/docs/4.2/configuration#environment-configuration:

If you need more flexible environment detection, you may pass a Closure to the detectEnvironment method, allowing you to implement environment detection however you wish:

$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() 检查环境/域和 returns 正确的 ID。

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

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

问题是你在哪里分开

所以实际的问题是您要在何处“分隔”站点。您是否希望它们位于单独的存储库/服务器上并且每个人都具有相同的配置集但内容不同?还是一个 repo 但每个站点的配置文件集不同?或者一切都一样,但使用 id 在数据库级别分隔数据。

这对您的问题有帮助吗?