如何解决在新部署应用程序DOKKU后丢失上传文件的问题



当我第一次用dokku部署我的应用程序时,我使用docker选项来托管uploadsIMG文件夹,一切都很好,但当我更新或重新启动我的应用时,我会丢失所有的图像等。。。谢谢

我尝试了docker选项:

`dokku docker-options:add betrocapi run "-v /home/dokku/dataBetroc:/uploadsIMG"`
`dokku docker-options:add betrocapi deploy "-v /home/dokku/dataBetroc:/uploadsIMG"`

当我运行时:

`dokku docker-options betrocapi`

它给了我:

`Build options:
--link dokku.mysql.betrocsql:dokku-mysql-betrocsql
Deploy options:
--link dokku.mysql.betrocsql:dokku-mysql-betrocsql
--restart=on-failure:10
-v /home/dokku/dataBetroc:/uploadsIMG
Run options:
--link dokku.mysql.betrocsql:dokku-mysql-betrocsql
-v /home/dokku/dataBetroc:/uploadsIMG
`

但当我在我的i应用程序中更改某些内容并重新运行git push dokku master时,我会丢失所有的图片。新部署的日志是:

`       CHECKS file not found in container: Running simple container check...
-----> Waiting for 10 seconds ...
-----> Default container check successful!
-----> Running post-deploy
-----> VHOST support disabled. Skipping domains setup
-----> Creating http nginx.conf
-----> Running nginx-pre-reload
Reloading nginx
-----> Setting config vars
DOKKU_APP_RESTORE:  1
-----> Found previous container(s) (d48be97bb479) named betrocapi.web.1
=====> Renaming container (d48be97bb479) betrocapi.web.1 to betrocapi.web.1.1547646932
=====> Renaming container (402abba16e28) fervent_hoover to betrocapi.web.1
-----> Shutting down old containers in 60 seconds
=====> d48be97bb47914c666fbcff5ede8fdf82093dad6c451e6bad2168b14f23ee41f
`

Ps:我也尝试:dokku storage:mount ....同样的结果。

任何人都可以向我解释为什么?

谢谢

Dokku与heroku有着相同的基础。

Heroku文件系统是短暂的,因此对文件系统的任何更改都将只存在于运行您的应用程序的dokku的最后一个活动容器上。因此,当你推送代码时,dokku基本上会用你的应用程序文件创建一个新容器,然后用旧容器替换它。关闭或重新启动应用程序时也会发生同样的情况。

使用dokku存储,只需按照本指南中的一些步骤即可使其正常工作http://dokku.viewdocs.io/dokku~v0.7.2/advanced-usage/persistent-storage/,但请注意,您必须在应用程序中使用相对路径ex."/app/storage",这样存储才能工作。但根据我们在prod上操作dokku应用程序一年后的经验,你可以很容易地因为dokku的工作原理而破坏文件。

如果你真的需要存储数据,我建议你使用专用的文件存储服务,比如AWS S3,它非常便宜。有几个宝石可以用来存储,可以很容易地帮助您在S3中处理文件,如papeclip、dragonfly、activestorage(如果您使用的是Rails>=5.2)

最新更新