2014-06-11 43 views
0

我将Redmine(www.redmine.org)安装推到Heroku(雪松堆栈)上。在我的Redmine本地实例中,文件上传的工作方式是数据库只是简单地存储一些关于文件的数据,包括文件的名称和位置,文件本身只存储在[app-location]/files(Redmine是一个ruby-on-rails应用程序)。当我的Redmine项目推到Heroku时,files目录无处可寻。从我读到的关于Heroku文件系统的文章来看,这并不令人意外。但令人惊讶和困惑的是,文件上传仍然有效,并且我没有设置s3,这是Heroku上文件上传的常见建议。我检查了Heroku数据库以获取有关文件上传的数据。没有s3的Heroku文件备份

下面是我找到该文件的步骤。

heroku run rails c 

和 - 获得最新的文件的位置 - 跑:

Attachment.last.diskfile 

其返回:

=> "/app/files/2014/06/140610184025_Very-Basic-Globe-icon.png"

此路径根本上不存在Heroku实例(使用heroku run bash并列出目录或运行查找)。我还下载了Heroku数据库的转储并将其导入本地。数据库数据显示在我的本地实例上,但文件无法找到(没有意外)。

所以我的问题是:

  1. 哪里Heroku的实例存储中的文件真的吗?
  2. 有没有办法让我在本地备份这些文件而不依赖于Amazon S3上的 ?

这个应用程序应该保持相当小,所以我不关心大规模的可伸缩性,我只是希望能够得到文件上传,如果有一天需要。

回答

1

我知道这个问题是有点老了,你可能已经找到了解决办法,但以防万一其他人在这个问题上绊倒:

  1. Heroku的还真是存储文件,它说,它是。当您运行heroku run bash时,发生了什么情况是Heroku正在运行一个one-off dyno以运行该命令。这意味着您将不会在实际运行您的应用程序的dyno中获得命令提示符。这就是为什么你无法找到你要找的文件。

  2. 目前没有支持备份物理文件(仅数据库)的官方addons,但是您可以编写自己的自定义脚本来将数据备份到您选择的位置(s3或其他位置)。为此,您可能需要使用Heroku Scheduler以类似于cron的方式运行备份脚本。

+1

我刚注意到这个回应。谢谢你的时间。自从我放弃了在Heroku上运行Redmine并转而使用Google Server。但是你的回答对于这个问题是适当的。不过,我可能会考虑在将来使用Heroku Scheduler上的脚本。谢谢。 – darkmatter

+0

如何进入实际运行我的应用程序的dyno?我需要确认文件是否真的存在。 – merlinpatt

+1

heroku运行bash – therealklanni