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 在数据库级别分隔数据。
这对您的问题有帮助吗?
我有一个有趣的问题,社区可能希望参与进来并提供帮助。我有一个自定义论坛软件。称它为 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 在数据库级别分隔数据。
这对您的问题有帮助吗?