2014-11-04 3 views
1

Я использую capistrano для развертывания моего приложения Rails для своего VPS, но после каждого развертывания при посещении моей страницы я получаю сообщение об ошибке. Журнал говорит:Capistrano deploy удаляет таблицу

I, [2014-11-04T08:20:16.659289 #12482] INFO -- : Started GET "/" for 82.73.170.71 at 2014-11-04 08:20:16 -0500 
I, [2014-11-04T08:20:16.662717 #12482] INFO -- : Processing by HomeController#index as HTML 
I, [2014-11-04T08:20:16.665979 #12482] INFO -- : Completed 500 Internal Server Error in 3ms 
F, [2014-11-04T08:20:16.670152 #12482] FATAL -- : 
ActiveRecord::StatementInvalid (Could not find table 'users'): 
    app/controllers/application_controller.rb:18:in `current_user' 
    app/helpers/sessions_helper.rb:26:in `logged_in?' 
    app/controllers/home_controller.rb:4:in `index' 

Я должен SSH в мой VPS и пойти в мой корень Rails и запустить RAILS_ENV=production bundle exec rake db:migrate. В моей папке db у меня все еще есть файл production.sqlite3, но он пуст.

Мои deploy.rb

# config valid only for Capistrano 3.1 
lock '3.1.0' 

set :application, 'movieseat' 
set :repo_url, '[email protected]:alucardu/movieseat.git' 

set :deploy_to, '/home/deploy/movieseat' 

set :linked_files, %w{config/database.yml config/secrets.yml} 
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system} 

require 'capistrano-rbenv' 

namespace :deploy do 

    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 

Так почему Capistrano удаление моей базы данных при развертывании?

ответ

4

Capistrano не касается миграции базы данных, если он не указан в задаче deploy:migrate в вашем Capfile или по телефону bundle exec cap deploy:migrate.

Ваша база данных «исчезает», потому что SQLite - это просто файл в вашем каталоге db. Поскольку вы не укажете, что он должен быть разделен между релизами (находится в каталоге shared), тогда он просто исчезает и остается в предыдущем выпуске. Добавьте db/production.sqlite3 к вашей декларации linked_files.

+0

Вы правы. Я только что проверил вывод от развертывания и не могу найти что-либо в нем «rake migrate» или «rake create». Но это происходит после развертывания, поэтому что-то идет не так. –

+0

Я обновил свой ответ – blelump

+0

Делает смысл, но когда я запускаю его, я получаю очевидную ошибку '/home/deploy/movieseat/shared/db/production.sqlite3 не excist'. Но просто поместить файл sqlite там не будет, потому что приложение не имеет ссылки на использование общего файла sqlite вместо включенного в папку db. –

Смежные вопросы