web-dev-qa-db-ja.com

Capistrano3が実行されていませんRailsデプロイ時の移行

ローカルサーバーにアプリを本番環境にデプロイしたいと思います。 capistrano3を使用しています。

これは私のcapfileです

require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/rvm'
require 'capistrano/bundler'
require 'capistrano/Rails'
#require 'capistrano/Rails/migrations'
#require 'capistrano/Rails/assets'


# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }

これは私のdeploy.rbです

# config valid only for Capistrano 3.1
lock '3.1.0'

set :application, 'ImpresaZiliani'
set :repo_url, '[email protected]:repos/impresaziliani.git'
set :branch, 'master'
# Default branch is :master
# ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }

# Default deploy_to directory is /var/www/my_app
set :deploy_to, '/home/francesco/impresaziliani'

# Default value for :scm is :git
set :scm, :git
set :deploy_user, "francesco"
set :Rails_env, "production"

set :keep_releases, 5

namespace :deploy do
  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      # Your restart mechanism here, for example:
      # execute :touch, release_path.join('tmp/restart.txt')
    end
  end

  after :publishing, :restart

  after :restart, :clear_cache do
    on roles(:web), in: :groups, limit: 3, wait: 10 do
      # Here we can do anything such as:
      # within release_path do
      #   execute :rake, 'cache:clear'
      # end
   end
  end

end

set :rvm_Ruby_version, '2.1.1'
set :default_env, { rvm_bin_path: '~/.rvm/bin' }
SSHKit.config.command_map[:rake] = "#{fetch(:default_env)[:rvm_bin_path]}/rvm Ruby-#                   {fetch(:rvm_Ruby_version)} do bundle exec rake"

私のdatabase.ymlは問題ありません。それが機能するサーバーで移行を手動で実行した場合、capistrano/Rails/migrationsとassetsの行のコメントを外してみましたが、何も変わりません。デプロイすると、bundleがインストールされるまで正常に実行されます。警告やエラーなしで、アセットプリコンパイラにスキップし、移行を実行しません。

どうすればこれを修正できますか?

ありがとうございました

17

rake db:migrateは、capistrano 3のデプロイごとに自動であり、コメントを解除する必要があります#require'capistrano/Rails/migrations ' Capfile

20
Jude Calimbas

また、デプロイするユーザーに次のようなdbの役割を持たせる必要があります。

server 'you_ip_address', user: 'user_name', roles: %w{web app db}
74
aquajach

Jude Calimbasとhiveerの回答はどちらも、受け入れられた回答よりも正確です。移行タスクは、デプロイタスクの一部として自動的に実行されます。

しかし、彼らの答えは観察された問題を説明していません。私が思い浮かぶのは、database.ymlファイルがdeploy.rbファイルに明示的にリンクされていないことだけです。だから次のような行

set :linked_files, %w{config/database.yml}

それを修正したでしょう。

これは古い質問であることは知っていますが、問題と修正に関してOPから詳細を知ることは興味深いでしょう。

0
Nick