Ruby on Rails Web サイトのステージング バージョンを git リポジトリから Amazon サーバーに正常にデプロイできるように Capistrano をセットアップしました。ただし、展開後、サーバー上のデータベースで移行を実行する必要があります。そうしないと、ログイン フォームやデータベース ベースのコンテンツを含むページを読み込むことができません。サーバーで移行を実行すると、最新の移行だけでなく、移行中のサイトのすべての個別の移行が表示されます。
Capistrano が以前の移行を維持できることは知っており、それは自動的に行われると思っていました。私の質問は、実際に新しい移行がある場合にのみ移行が必要になるように、発生している明らかなデータベースのワイプまたは損失をどのように停止するのですか?
Capistrano の出力に異常なエラーは見られません。私は Capistrano とデータベースに関しては初心者です。database.yml ファイルにステージング用のエントリがないことに気付きました。データベースを db/development.sqlite3 に設定してステージング用のエントリを追加するのと同じくらい簡単にできるのではないかと考えていました。
ここに私の deploy.rb ファイルがあります:
set :application, "staging"
set :scm, :git
set :repository, "."
set :deploy_via, :copy
#set :copy_cache, true
set :copy_exclude, [".git"]
set :user, "username"
set :use_sudo, false
default_run_options[:pty] = true
server "server_url", :app, :web, :db, :primary => true
set :deploy_to, "/var/www/staging"
# if you want to clean up old releases on each deploy uncomment this:
set :keep_releases, 3
after "deploy:restart", "deploy:cleanup"
# If you are using Passenger mod_rails uncomment this:
namespace :deploy do
task :start do ; end
task :stop do ; end
task :restart, :roles => :app, :except => { :no_release => true } do
run "touch #{File.join(current_path,'tmp','restart.txt')}"
end
end
そして私のdatabase.ymlファイル:
# SQLite version 3.x
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
production:
adapter: sqlite3
database: db/production.sqlite3
pool: 5
timeout: 5000