2

我在别处读到 Dokku 不支持 SQLite。为什么不?我正在使用带有 SQLAlchemy 的 Flask 应用程序,似乎所有抽象都发生在此处。难道我不能把 sqlite 数据库文件放在磁盘上的某个地方(也许是/home/dokku/database/my_db?)然后把它交给 SQLAlchemy 吗?

engine = create_engine('sqlite://///home/dokku/database/my_db')

更具体地说,我会使用 Dokku 将该字符串存储为环境变量,而不是直接传递它。

为什么这行不通?

4

2 回答 2

7

为什么这行不通?

Dokku 通过 Docker 创建容器,您的应用程序在此容器及其文件系统中运行。此外,您的烧瓶应用程序无法/home/dokku 通过设计访问。

根据您的具体需求,只要您有一个 docker 容器:

  • 使用容器内的路径(例如 /app/db.sqlite)。只要应用程序的容器存在,它就可以工作。但是请注意,出于所有目的,您应该将 Dokku 应用程序的文件系统视为临时文件系统。

  • 映射驻留在 dokku 主机上的主机文件,例如使用dokku-persistent-storage插件。

  • 使用docker 数据卷。在撰写本文时,似乎没有 dokku 插件,但制作起来相对简单(需要一个create创建数据容器的link命令,一个将其链接到应用程序的命令,最后是一个dokku-args生成参数的钩子到docker run)

于 2014-12-20T17:46:44.033 回答
1

好吧,我来晚了,但是,这主要是因为 Dokku 使用 docker 映像,这些映像无法访问主机操作系统(/home/dokku/database/my_db.db就应用程序而言,这意味着不存在)。

另一个因素是 Dokku 被设计为 Heroku 的开源“克隆”,它也不支持这种方式的持久文件存储(请参阅https://devcenter.heroku.com/articles/sqlite3

于 2014-12-16T03:36:09.687 回答