【问题标题】:Hosting files on heroku在heroku上托管文件
【发布时间】:2013-02-28 23:47:43
【问题描述】:

我目前正在开发 Facebook 应用程序,我需要执行以下操作: 创建一个包含“key”、“user”和“link”字段的哈希。 link 字段应该包含一个字符串,即 json 文件的地址。

现在,我的问题如下:我从 facebook 收集数据并将其存储在 json 文件中。当一个事件被调度(例如用户点击一个按钮)时,如何在 heroku 上创建一个文件 DIRECLTY,有点像一个文件夹,并将 URL 放入链接字段的哈希中?我的位置应该看起来像.../[user]/myfile.json

或者,如果不是heroku,你能推荐另一个我可以做同样事情的主机吗?

注意:我刚刚开始使用数据库,我只有非常基本的 SQL 知识,数据库还没有完成。我对postgres一无所知,但如果喜欢的话,我可以学习。我的应用主要是用php开发的。

【问题讨论】:

    标签: php heroku filesystems hosting host


    【解决方案1】:

    要直接在 heroku 上创建文件,您需要在源代码树中创建文件,然后在发布应用程序时它将存储在 heroku 上。

    当然,这不适用于您要在应用程序运行时创建的文件。 Heroku 不支持在同一服务器上运行时创建文件。至少不会因为文件系统不是持久的(对于不属于源树的任何内容)而让它们留在那里。

    您需要在数据库或其他远程位置(如Amazon S3)中创建这些“文件”。

    参见:

    【讨论】:

    • 我的应用程序应该让用户从其帐户中获取包含数据的 json,然后稍后再获取,因此我可能需要将它们托管在 Amazon 3S 上,因为用户稍后应该能够在何时下载它从“key”字段引入key。很好的答案,非常感谢
    • 您需要存储“供以后”使用的所有东西都需要放在远程位置,是的。 Heroku 不会保留它更长时间。 Heroku Ephemeral filesystem 是这里的重点。
    • 好吧,如果我想一想,无论如何,将它存储在 heroku 上并不是一件好事,因为只有 100 Mb 可用空间
    • 如果数据是 JSON 并且您想为特定用户存储它,您可以考虑将其存储到 MongoDBCouchDB 或其他一些数据库存储中。
    【解决方案2】:

    正如@hakre 所说,Heroku 在Ephemeral filesystem 上运行应用程序。这意味着当实例重新启动时,您的本地存储将丢失。

    根据您要存储的数据,有多种存储方式。

    1. Cookie:以 cookie 的形式发回,让浏览器处理。如果数据由用户创建并且在某个时间点过期,则这是可行的。
    2. PostgreSQL:如果您在应用程序中使用 SQL 数据库,它可以去那里。作为反序列化的行或TEXT 字段。
    3. CDN:如果数据要对所有人公开,您可以将其上传到例如 Amazon S3 或 Rackspace CloudFiles 并发布容器。然后你可以通过 URL 引用它。
    4. 云存储:如果数据需要一些访问控制,您仍然可以将其上传到 S3 或 CloudFiles 并在请求时以编程方式从那里提取。如果存在性能问题,您可以将其缓存在 Memcache 或其他一些缓存插件中。
    5. 文档数据库:MondoDBCouchDB 将数据存储为 JSON 文档。两者都有很多功能。写作和阅读是两者的基本操作。如果您需要版本历史记录,CouchDB 会为您完成(默认情况下它会存储 JSON 的所有修订版本。
    6. 浏览器本地存储:现在我们有了 HTML5,您可以在浏览器上存储数据。它有点前沿,无法在一些仍然存在的旧浏览器上运行。

    还有很多其他方法可以将 JSON 文档存储在文件以外的位置。这些只是冰山一角。

    【讨论】:

    • 我确实需要将它们存储在一个文件中。用户应该有权访问该文件,以便他/她保存它,并在一段时间后将文件上传回来,以便我的应用程序可以处理它。感谢您的提示。我可能会使用 S3
    • 请记住:上传和下载文件并不意味着您必须将它们存储在文件中。 HTTP 只是带有标题的文本。
    • 您能推荐一些更有效的方法吗?我想要做的是:用户将数据保存在一个 json 文件中,而不关心它存储在哪里。一段时间后,他/她需要将该文件上传到其他地方,文件中的数据将被使用
    • 使用这些参数,任何方法都可以工作。也就是说,也是 S3。
    • 嗯,这就是我想我会做的。我需要它是一个静态链接,因为该链接将保存在数据库中的散列中,并且用户将使用关联的密钥访问它。谢谢
    猜你喜欢
    • 2018-05-22
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2011-07-04
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多