【问题标题】:Running into problems with creating a file on Heroku (Rails)在 Heroku (Rails) 上创建文件时遇到问题
【发布时间】:2012-02-01 19:13:40
【问题描述】:

所以我有一个用户模型,在用户注册后,我需要生成一个包含一些特定用户信息的文件。 Heroku 不允许我这样做。除了生成文件并将其写入 S3 存储桶并从那里引用之外,还有其他选择吗?

【问题讨论】:

  • 什么样的用户信息?这不是您可以存储在数据库中的东西吗?有关什么类型的信息以及您希望如何在您的应用中使用它的更多信息会很有帮助。

标签: ruby-on-rails heroku


【解决方案1】:

Heroku 的文件系统是只读的。唯一的例外是 tmp 目录,但那是暂时的。 S3 是一种常见的解决方案。另一种可能性是将“文件”保存到数据库中(在迁移中使用“文本”列)。您还可以使用一些文档存储,例如 CouchDB 或 MongoDB,并将您的“文件”存储在那里。有几个适用于 Couch 和 Mongo 的 Heroku 插件甚至提供免费层。

【讨论】:

  • 实际需要生成的文件是一个xml文件。它相当短,但确实有一些用户变量。例如,用户注册一个电话号码,该号码需要在 xml 提要中。同样,提要需要在用户注册时生成,并且必须从资源 (/user/file.xml) 访问。
  • 在阅读了更多关于 MongoDB 的信息后,使用 GridFS 似乎是一个优雅的解决方案。与 S3 相比,您是否看到这样做的任何缺点/优点?数据存储的混合是否会导致任何潜在问题?
  • Mongo 与 S3 的主要优势在于 S3 相当慢。对于大文件来说这是一个很好的解决方案,但是如果您需要加载文件作为服务客户端请求的一部分,那么 S3 响应时间就不能令人满意了。
【解决方案2】:

在 Cedar 堆栈上,文件系统是短暂的,这意味着文件系统仅在 dyno 的持续时间内存在(这是一个未知且不可预测的时间量)。

在较旧的堆栈上,只有 /tmp 是可写的,而且是短暂的。

因此,要生成文件并将其导出,您需要考虑如何交付文件。

如果是以后下载,你可以随时从数据库中生成文件吗(这样就完全不用写文件了)。

如果现在要下载,请将其流式传输回给最终用户。

它是为了导出到 S3,这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 2020-08-19
    • 2017-03-26
    相关资源
    最近更新 更多