我用 capistrano 部署,因为 db 的数据表设计变化,seed 数据也有了变化,所以是先运行了
rake db:migrate RAILS_ENV=production
rake db:seed RAILS_ENV=production
再运行
cap production deploy
但我发现,现在的目录里,
$ ls
app Capfile config.ru db Gemfile.lock log Rakefile releases revisions.log spec tmp
bin config current Gemfile lib public README.md repo shared vendor
在外面这个 db 里面的 seeds.rb 是旧的,而且我 rake db:seed RAILS_ENV=production 执行的是这个。 而 current 里面的 db/seeds.rb 是新的,但如果我在这个目录下去执行,会出错,
$ rake db:seed RAILS_ENV=production
(in /weekly_report/releases/20141202075349)
rake aborted!
LoadError: cannot load such file -- database_cleaner
难道要我手工把外面 db 里的文件换成新的吗?好像不科学吧? 但 rake db:migrate RAILS_ENV=production 却是正常的……说明执行这句的时候取的是 current 里面的 schema……
变更数据结构和 seeds.rb 后,确实应该是在 current 目录下进行
cap production deploy:migrate
然后我手动进入 current 目录,进行
rake db:seed RAILS_ENV=production
之前出现过找不到 database_cleaner,是因为之前在 gemfile 中我把它装在 test group 下了(奇怪,那为什么我平时在 development 环境中也能用呢?),把它拿出来就好。
gem 'database_cleaner'