使 CMS 的媒体目录在本地开发中可用,并回退到生产数据(例如 Magento 2 public/media)
Make Media Directory of a CMS available on local development, with fallback to production data (for example Magento 2 public/media)
开发网上商店时,我们不想将所有媒体资产复制到本地开发机器。
如果能获得系统的真实视图,即从生产服务器按需加载媒体图像,那就太好了。
如何实现?
对于 Magento 2,a open source module 正是这样做的。
如果您使用的是 Linux,似乎可以使用 http 和 union fuse 文件系统来使用更通用的解决方案。这可以在不同的 Shop- 和 CMS 系统上工作,例如 Shopware、TYPO3 等等。
以下示例在 Ubuntu 20.04
上测试
但是:该解决方案没有在生产安装中得到很好的测试,所以请小心。
首先安装需要的包
apt install httpdirfs unionfs-fuse
我们假设生产服务器使用 Apache。在下一步中,我们启用目录列表,但仅限于特定的 - 秘密 - 用户代理。确保用您的秘密替换“ThisIsSecret”。
<If "%{HTTP_USER_AGENT} == 'ThisIsSecret'">
Options +Indexes +MultiViews
AllowOverride None
</If>
<Else>
Options -Indexes -MultiViews +FollowSymLinks
AllowOverride All
</Else>
转到本地开发目录并移动当前media
目录:
cd /home/me/projects/example.com/public
mv media media_local
现在httpdirfs
用于通过HTTP挂载服务器的目录。 httpdirfs
解析目录列表并让您看到远程文件。无法编辑。
mkdir media_remote
httpdirfs --cache --user-agent ThisIsSecret https://example.com/media/ media_remote
接下来,我们将 unionfs
与 CopyOnWrite (cow
) 选项一起使用,以便仍然能够写入媒体文件夹。
mkdir media
unionfs-fuse -o cow media_local=RW:media_remote=RO media
开发网上商店时,我们不想将所有媒体资产复制到本地开发机器。
如果能获得系统的真实视图,即从生产服务器按需加载媒体图像,那就太好了。
如何实现?
对于 Magento 2,a open source module 正是这样做的。
如果您使用的是 Linux,似乎可以使用 http 和 union fuse 文件系统来使用更通用的解决方案。这可以在不同的 Shop- 和 CMS 系统上工作,例如 Shopware、TYPO3 等等。
以下示例在 Ubuntu 20.04
上测试但是:该解决方案没有在生产安装中得到很好的测试,所以请小心。
首先安装需要的包
apt install httpdirfs unionfs-fuse
我们假设生产服务器使用 Apache。在下一步中,我们启用目录列表,但仅限于特定的 - 秘密 - 用户代理。确保用您的秘密替换“ThisIsSecret”。
<If "%{HTTP_USER_AGENT} == 'ThisIsSecret'">
Options +Indexes +MultiViews
AllowOverride None
</If>
<Else>
Options -Indexes -MultiViews +FollowSymLinks
AllowOverride All
</Else>
转到本地开发目录并移动当前media
目录:
cd /home/me/projects/example.com/public
mv media media_local
现在httpdirfs
用于通过HTTP挂载服务器的目录。 httpdirfs
解析目录列表并让您看到远程文件。无法编辑。
mkdir media_remote
httpdirfs --cache --user-agent ThisIsSecret https://example.com/media/ media_remote
接下来,我们将 unionfs
与 CopyOnWrite (cow
) 选项一起使用,以便仍然能够写入媒体文件夹。
mkdir media
unionfs-fuse -o cow media_local=RW:media_remote=RO media