database - 有没有一种简单的方法来托管带有小数据文件的程序(尤其是在 Heroku 上)?

标签 database heroku yaml

如果你go to我的 Heroku 托管 to do list program ,你可以把测试数据放进去,但是很快就没了。这是因为,据我所知,Heroku 有一个“临时”文件系统,并处理用户通过 post 写入的任何数据。我不知道如何设置 PostgreSQL 数据库或任何其他类型的数据库(尽管我可能很快就会,因为我正在学习 Hartl 的 Rails 教程)。我只是在使用一个简陋的 YAML 文件。它在我的本地环境中运行良好。

除了学习如何托管数据库之外,对于解决这个问题的初学者有什么建议吗?有没有我可以使用的另一种免费服务,无需进一步设置即可使用?非常欢迎任何建议。

我完全理解我不能用 Heroku 做我想做的事情(参见例如 questions like this one )。我只是想更好地了解我的选择。

更新:看起来像 thisthis可能对使用 Dropbox 托管(读/写)平面文件有一些想法。

最佳答案

答案是否定的。但我会花一点时间解释原因。

我知道您还不熟悉构建网络应用程序、数据库和所有这些东西。没关系!这是一个很好的问题。

但是,您需要了解的是,当您尝试构建可扩展的网站时,按照您的要求行事是一个非常糟糕的主意。 Heroku 是一家专门致力于帮助开发人员构建可扩展网站的平台公司。这正是该平台所擅长的。

虽然 Heroku 非常容易学习和使用,但它并不适合初学者。它适用于经验丰富的开发人员。如果您看一下 Heroku 的原则是什么,以及他们在其平台上执行的政策,这一点就非常清楚了。

Heroku 竭尽全力让构建可扩展网站变得非常容易,并且让那些会使构建可扩展网站变得更加困难的事情变得非常困难。

那么,让我们花点时间谈谈为什么 Heroku 首先有一个临时文件系统!

此设计决策迫使您(应用程序的开发人员)将应用程序所需的文件存储在更安全、更快的专用文件存储服务(如 Amazon S3)中。这种做法带来了很多可扩展性优势:

  • 如果您的网络服务器不需要写入磁盘,则可以多次部署它们而无需担心存储限制。
  • 不需要在网络服务器之间共享磁盘。共享磁盘通常会导致 IO 争用,并对性能产生不利影响。
  • 由于不需要磁盘资源,因此可以轻松地跨商用服务器水平扩展您的网络应用程序。

因此,您不能在 Heroku 上存储平面文件的原因是这样做会导致可伸缩性和性能问题,并且 Heroku 几乎不可能帮助您轻松地扩展您的应用程序(这是他们的主要目标)。

这就是为什么建议使用文件存储服务来存储文件(如 Amazon S3),或使用数据库来存储数据(如 Postgres)。

我建议(个人)使用 Heroku Postgres .您提到您正在使用 rails,并且 rails 具有出色的内置 Postgres 支持。它具有所谓的 ORM,让您可以使用一些非常简单的 Ruby 对象与数据库对话,并删除几乎所有先决条件数据库背景以使事情顺利进行。一旦您尝试一下,它真的很有趣/很容易!

最后:Heroku Postgres 也有一个很棒的免费计划,这意味着您可以在其中免费存储待办事项应用程序的数据。

希望这对您有所帮助!

关于database - 有没有一种简单的方法来托管带有小数据文件的程序(尤其是在 Heroku 上)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41517573/

相关文章:

database - 将 PostgreSQL 数据库移动到新的 Ubuntu 机器

database - 从 ArangoDB 检索嵌套 json 或树

java - 如何使用 Spring Boot 将配置读取到 map

ruby - 在 Heroku 上部署,如何指定用于 bundler 的 ruby​​ 版本?

amazon-web-services - yaml 中的 Cloudformation 嵌套堆栈输出

mysql - Mysql索引表查询慢

Sqlite 将数据库合并为一个,具有唯一值,保留外键关系

ruby-on-rails - Heroku登录时出现 ruby 错误

django - 在 Heroku 上运行的 Celery Beat 进程发送任务两次