0

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
4

1 に答える 1

0

Capistrano は、移行番号を維持するものではありません。レールはそうします。カピストラーノにデプロイの一部として移行を実行させたい場合は、これを config/deploy.rb に追加してください

after "deploy:update_code", "deploy:migrate"

おそらく、db/production.sqlite3 の代わりに、デプロイごとに書き換えられないプロダクション sqlite3 ファイル用の別の場所を用意する必要があります。/home/user/production.sqlite3 のようなもの

于 2013-06-18T15:50:16.760 に答える