到目前为止,我一直在测试部署我的应用程序,使用标准位置的数据库文件夹。在服务器上,它最终位于: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
链接为:项目/当前/数据库/共享 -> 项目/共享/数据库/共享
种子、架构和迁移都在最初放置的位置。