【问题标题】:Ruby-on-Rails Capistrano deployment -- database locationRuby-on-Rails Capistrano 部署——数据库位置
【发布时间】:2019-08-24 17:01:42
【问题描述】:

到目前为止,我一直在测试部署我的应用程序,并将数据库文件夹放在它的标准位置。在服务器上,它最终位于: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

对新部署进行故障排除显示新链接的 db 文件夹中缺少文件“seeds.rb、schema.rb 和 migrate(文件夹)”。

Cap 日志显示存储库首先被克隆(将丢失的文件放在 project/current/db 目录中,然后该目录被删除并替换为 project/ 的链接共享/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]

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails deployment capistrano


    【解决方案1】:

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

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

    并从linked_dirs数组中删除db

    【讨论】:

      【解决方案2】:

      我上面的原始“序列”将不起作用。 Seeds.rb、schema.rb 和 migrate 文件夹不得位于 project/shared 文件夹中,因为这会阻止后续部署更新数据库。

      我通过将“db/shared”添加到 :linked_dirs 列表并更改 database.yml 以在 db/shared/production.sqlite3

      中显示数据库来解决此问题

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

      链接是:project/current/db/shared -> project/shared/db/shared

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-11
        • 1970-01-01
        • 1970-01-01
        • 2020-01-15
        • 1970-01-01
        • 1970-01-01
        • 2017-07-28
        • 1970-01-01
        相关资源
        最近更新 更多