如何在 Rails 应用程序中配置虚拟文件夹?

How to configure a virtual folder in Rails app?

这个问题参考了下面link:

贴出的解决方案

提供的答案提到创建虚拟文件夹,但没有说明如何创建。我有一个通过 Dokku 的 Rails 应用程序,我有一个安装在根文件夹中的数字海洋块存储。 “/mnt/volume-sgp1-01/”.

所以问题是如何使这个 "virtual folder" 指向 rails 应用程序之外的特定目录?

此外,如何配置一个自定义 GET,使其中的所有文件都可以通过 xyz.com/mnt/volume-sgp1-01/...等访问

更新: 我指的是 "virtual folder" 即不是真正文件夹的文件夹,但在 Rails 应用程序中被识别为一个文件夹,它指向 Rails 根文件夹之外的现有文件夹。

至于该文件夹的用途,它是在服务器中提供一个不受 Rails 根文件夹中任何内容影响的永久存储位置,就像我重新部署 rails , Rails 文件夹中的文件被替换。

[注意:我不能使用亚马逊 AWS,因为中国经常封锁他们的服务器。所以,我使用 Digital Ocean Block Storage 作为我的解决方案。]

您可以使用 dokku 的 persistent-storage 插件将卷装载到 docker 容器中。

我没有用过回形针gem,但我用过载波gem,我也遇到了需要持久存储的问题。所以我认为也许我的解决方案也可以应用于您的解决方案。我还假设您使用的是 Digital Ocean droplet,但我认为它也适用于任何服务器。正如 Jose Diaz-Gonzalez 所提到的,您需要使用 dokku 的持久存储插件。

首先,您必须 select 一个要存储文件的文件夹。Dokku 文档推荐文件夹 /var/lib/dokku/data/storage/。所以你可以通过 SSH 进入你的 Droplet,使用 mkdir 创建一个文件夹。然后 运行 chown 授予 dokku 用户写入该文件夹的权限。文件夹的路径应该在命令的左侧。

cd /var/lib/dokku/data/storage
mkdir paperclip_storage
chown -R 32767:32767 paperclip_storage

当您将 rails 应用程序部署到 dokku 时,dokku 使用的 ruby 构建包会将您的应用程序放置在 /app 文件夹中。所以假设对于我的 gem CarrierWave,文件上传位置是 uploads/photos/,我的 dokku 容器中上传的完整路径将是 /app/public/uploads/photos. 此路径应位于命令的右侧。

!!将 /app/public/paper/clip/upload 替换为您上传回形针的正确文件夹。!!

dokku storage:mount album /var/lib/dokku/data/storage/paperclip_storage:/app/public/paper/clip/upload

之后你需要重建你的应用程序

dokku ps:rebuild app-name

现在您可以通过 ssh 进入您的上传文件夹,/var/lib/dokku/data/storage/paperclip_storage 并尝试使用回形针 gem 上传文件。如果 link 成功,当您使用 ls 命令检查时应该立即显示文件。

cd /var/lib/dokku/data/storage/paperclip_storage
ls