Capistrano的'cap生产部署:迁移`将无效

Abu*_*e10 1 deployment capistrano ruby-on-rails ruby-on-rails-4

我无法让Capistrano运行我的数据库迁移.

我正在使用DigitalOcean提供的VPS来托管我的Rails应用程序.以前我会用git push heroku masterHeroku主持我的项目,但现在我想要更便宜的东西.我正在尝试使用Capistrano将我的代码部署到服务器(使用教程启动并运行).我可以成功地将新提交到服务器上,但是,我无法让Capistrano运行我的数据库迁移.

为了展示我的问题,我创建了一个新模型,提交了更改,推送到Github repo,然后运行cap production deploy.我查看了服务器,我可以看到新的迁移文件. 以下是该命令的输出,以防它在调试问题时有所帮助.

当我运行cap production deploy:migrate数据库时没有任何反应:

~/Projects/rails/testapp $ cap production deploy:migrate
DEBUG[aec67347] Running /usr/bin/env [ -d ~/.rbenv/versions/2.1.3 ] on 104.236.181.65
DEBUG[aec67347] Command: [ -d ~/.rbenv/versions/2.1.3 ]
DEBUG[aec67347] Finished in 1.107 seconds with exit status 0 (successful).
Run Code Online (Sandbox Code Playgroud)

这是我在生产服务器上的PostgeSQL数据库(没有改变):

testapp_production=> \d
               List of relations
 Schema |       Name        |   Type   | Owner  
--------+-------------------+----------+--------
 public | cars              | table    | deploy
 public | cars_id_seq       | sequence | deploy
 public | schema_migrations | table    | deploy
 public | users             | table    | deploy
 public | users_id_seq      | sequence | deploy
(5 rows)
Run Code Online (Sandbox Code Playgroud)

现在,当我RAILS_ENV=production bundle exec rake db:migrate在服务器上运行时,它成功运行了迁移,由新manufacturers表证明:

testapp_production=> \d
                 List of relations
 Schema |         Name         |   Type   | Owner  
--------+----------------------+----------+--------
 public | cars                 | table    | deploy
 public | cars_id_seq          | sequence | deploy
 public | manufacturers        | table    | deploy
 public | manufacturers_id_seq | sequence | deploy
 public | schema_migrations    | table    | deploy
 public | users                | table    | deploy
 public | users_id_seq         | sequence | deploy
(7 rows)
Run Code Online (Sandbox Code Playgroud)

为什么cap production deploy:migrate不运行数据库迁移? 此外,我的印象是cap production deploy自动运行任何新的迁移,这是真的吗?

我的应用程序的配置可以在这里找到:https://github.com/Abundnce10/testapp

这是我的Capfile:

require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/bundler'
require 'capistrano/rails'
require 'capistrano/rbenv'

set :rbenv_type, :user # or :system, depends on your rbenv setup
set :rbenv_ruby, '2.1.3'
Run Code Online (Sandbox Code Playgroud)

这是我的/config/deploy.rb档案:

lock '3.1.0'
set :application, 'testapp'
set :repo_url, 'https://github.com/Abundnce10/testapp'
set :deploy_to, '/home/deploy/testapp'
set :linked_files, %w{config/database.yml}
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

namespace :deploy do

  before :publishing, 'deploy:migrate'

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end

  after :publishing, 'deploy:restart'
  after :finishing, 'deploy:cleanup'
end
Run Code Online (Sandbox Code Playgroud)

这是我的/config/deploy/production.rb档案:

set :stage, :production
server '104.236.181.65', user: 'deploy', roles: %w{web app}
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢!

Abu*_*e10 9

我没有包含db在我的/config/deploy/production.rb文件中.它现在看起来像:

set :stage, :production
server '104.236.181.65', user: 'deploy', roles: %w{web app db}
Run Code Online (Sandbox Code Playgroud)

添加db:roles允许的,当我运行数据库迁移到自动运行cap production deploy.