Ruby-on-Rails Capistrano 部署 -- 数据库位置



到目前为止,我一直在测试部署我的应用程序,使用标准位置的数据库文件夹。在服务器上,它最终位于:project/current/db。显而易见的问题是,每次部署应用程序时,数据库都会被覆盖。为了消除这种情况,我将数据库文件夹添加到:linked_dirs列表中,因此 deploy.rb 中的行变为:

append :linked_dirs, "db", "log", "tmp/pids", "tmp/cache", "tmp/sockets", "public/system"

使用此设置进行部署后,应用不会运行,并发出错误:

Showing /home/deploy/gps_monitor/releases/20190824124626/app/views/gps_messages/index.html.erb where line #14 raised:
SQLite3::SQLException: no such table: gps_messages

对新部署进行故障排除时,新链接的数据库文件夹中缺少文件"seeds.rb、schema.rb 和 migrate (文件夹)"。

Cap 日志显示首先克隆存储库(将丢失的文件放在项目/当前/db 目录中,然后删除该目录并替换为指向项目/共享/db的链接。

我想我可以想出某种解决方法,但我认为会有一种标准方法来防止此问题。顺序应为

1) clone the repo
2) create the project/shared/db folder
3) cp project/current/db/*  project/shared/db
4) rm project/current/db
5) create symlink

当然,我不是唯一一个经历过这种情况的人,传统的解决方案是什么?

Capistrano Version: 3.11.0 (Rake Version: 12.3.3)
Rails 6.0.0.beta3
ruby 2.6.2p47 (2019-03-13 revision 67232) [armv7l-linux-eabihf]

感谢您的任何帮助。

尝试链接您需要的文件,而不是整个目录:

set :linked_files, fetch(:linked_files, [])+%W{db/somefile.yml db/another_file.sqlite}

并从linked_dirs阵列中删除db

我上面的原始"序列"将不起作用。Seeds.rb、schema.rb 和迁移文件夹不能位于项目/共享文件夹中,因为这会阻止后续部署更新数据库。

我通过将"db/shared"添加到 :linked_dirs 列表中并更改 database.yml 以在db/shared/production.sqlite3上显示数据库来解决此问题

数据库位于:project/shared/db/shared/production.sqlite3

链接为:项目/当前/数据库/共享 -> 项目/共享/数据库/共享

种子、架构和迁移都在最初放置的位置。

最新更新