【问题标题】:Rails: How to set up db:schema:load for initial deploy with CapistranoRails:如何设置 db:schema:load 以使用 Capistrano 进行初始部署
【发布时间】:2016-03-06 00:50:59
【问题描述】:

我正在尝试使用Capistrano 3 部署我的Rails 4 应用程序。我在运行db:migrations 时收到错误消息(我一直马虎,抱歉)。有没有办法让 Capistrano 使用 db:schema:load 部署应用程序(至少是第一次)?

摘自我的deploy.rb

namespace :deploy do

  %w[start stop restart].each do |command|
    desc 'Manage Unicorn'
    task command do
      on roles(:app), in: :sequence, wait: 1 do
        execute "/etc/init.d/unicorn_#{fetch(:application)} #{command}"
      end      
    end
  end

我不确定如何覆盖Capistrano 3 的默认行为。谁能告诉我如何将它添加到我的脚本中?

【问题讨论】:

    标签: ruby-on-rails-4 capistrano3


    【解决方案1】:

    对于第一次部署,我通常通过登录服务器来绕过它,cding 进入发布目录(此时将包含已部署的代码),然后手动运行 RAILS_ENV=yourenv bundle exec rake db:setup

    【讨论】:

    • 除非这是一个糟糕的解决方法。我们永远不需要直接通过 SSH 连接到服务器——如果我们可以在服务器上运行命令,那么 Capistrano 的意义何在?
    • 自动化。 Capistrano 的目的是让您不必一遍又一遍地运行相同的长命令集。
    【解决方案2】:

    在带有 Rails 5.1.6 应用程序的 Capistrano 3.10.1 中,

    ~/Documents/p.rails/perla-uy[staging]$ bundle exec cap staging deploy:updating
    

    足以让我手动运行 db:structure:loaddb:schema:load 任务。在与主机的安全 shell 会话中,切换到新创建的发布目录并:

    dclo@localhost:~/perla-uy/releases/20180412133715$ bundle install --without development test --deployment
    dclo@localhost:~/perla-uy/releases/20180412133715$ bundle exec rails db:schema:load
    

    尝试deploy:migrate 的部署(成功或失败)并不完全相同。

    注意:我通过 shell 登录设置了 RAILS_ENV=productionRAILS_MASTER_KEY=...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-31
      • 2017-06-05
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多