我已经看到了很多关于谷歌对App Engine的限制,但我没有找到很多关于Heroku限制和比较限制的内容。有没有,如果有的话,具体来说,它们是什么?
一个相关的问题是我看到Heroku有一个第三方添加的市场。但是,如果我想要其中一个附加功能所涵盖的功能,我是否仅限于使用这些功能,或者我可以从我选择的任何供应商那里获得一个功能,甚至可以自己编写代码?我可以自己编写代码,这是这些平台的全部意义,但这并不意味着没有限制,这使我回到最初的问题。
仅供参考,我使用的是Python 2.7和Django 1.6.1,如果这对你的答案很重要的话。我知道rapgenius的性能争议,但我不希望任何服务一直都是完美的,所以我不确定那么重要。
答案 0 :(得分:2)
您可以在Acceptable Use Policy中找到有关Heroku限制的更多信息。还有关于开发中心的"Limits"文章。
您可以自由地使用Heroku应用程序中的任何服务,无论是在附加目录中,还是在其外部,或者您自己是否正在运行和托管它。
答案 1 :(得分:2)
Heroku有30 second request timeout,不可配置。这意味着30秒后请求将被中断,但您的代码将继续运行,使此特定的dyno不可用。如果用户然后刷新页面并与另一个dyno开始相同的长时间运行操作,那么另一个dyno也可能变得不可用...
Heroku有一个短暂的文件系统。这意味着您无法将文件直接上传到文件系统:它们将在重新启动时删除。您必须将外部存储配置为例如将您的文件存储在S3 Cloud中。但请注意,这可能会使您的私人文件公开,因此我想您可能需要另一层复杂性,例如:为用户生成一次性链接,用于下载私有文件,过期时间非常短。除非,即您实现了一些可以将您的用户身份验证从Heroku传递到AWS的自定义解决方案,但是您可能也可以首先在AWS上托管。
出于同样的原因,您不能将SQLite用作数据库,因为它是基于文件的。如果这样做,您将得到不一致的结果。基于文件系统的缓存也是如此,这是一些django库的默认值。在我弄清楚之前,我有时最终会看到一个不同的用户头像(新的或旧的),可能取决于哪个进程正在为我的请求服务。
在Heroku上直接调试并不是一件容易的事。您不能只是在各个地方插入import pdb; pdb.set_trace()
并远程运行python manage.py runserver
,因为出于安全考虑,它不会让您这样做。