【发布时间】:2013-06-18 15:38:42
【问题描述】:
我设置了 Capistrano,它允许我将 Ruby on Rails 网站的暂存版本从 git 存储库成功部署到亚马逊服务器。但是,部署后,我必须在服务器上的数据库上运行迁移。如果我不这样做,任何带有登录表单或基于数据库的内容的页面都无法加载。当我在服务器上运行迁移时,我看到正在迁移的站点上的每个单独迁移,而不仅仅是最近的迁移。
我知道 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
【问题讨论】:
标签: ruby-on-rails migration capistrano