У меня была именно эта проблема, и я боролся с ней из-за того, что мне было стыдно сказать, это были хорошие 5 или 6 часов.В конце концов, когда я понял, в чем проблема, я почувствовал, как чмокаю себя, потому что я знал это однажды, но забыл об этом.Вот суть проблемы, начиная с этой части deploy.rb:
set :location, "ec2-webserver.compute-1.amazonaws.com"
role :web, location
role :app, location
role :db, "cmsinstance.c7r8frl6npxn.us-east-1.rds.amazonaws.com", :primary => true
Когда вы определяете роли машин для Capistrano, вы на самом деле не определяете, какие машины будут играть определенную роль ...скорее вы определяете , на каких машинах код Capistrano будет запускаться при применении рецепта развертывания для роли.Поэтому, когда вы определяете роль: db, вы хотите указать свой экземпляр EC2, , а не экземпляр RDS.Вы не можете подключиться к машине RDS, поэтому Capistrano не может запустить рецепт там.Вместо этого укажите: db на ту же машину, на которую вы указываете: web и: app, то есть
set :location, "ec2-webserver.compute-1.amazonaws.com"
role :web, location
role :app, location
role :db, location, :primary => true
Какое отношение имеет тогда машина RDS?Ну, это файл database.yml, который определяет, на каком компьютере в действительности выполняется СУБД, где должен выполняться SQL.Вам просто нужно убедиться, что вы устанавливаете значение host: для целевой базы данных, например:
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: <your_db>_production
pool: 5
username: <username>
password: <password>
host: cmsinstance.c7r8frl6npxn.us-east-1.rds.amazonaws.com
Имеет смысл?
Я надеюсь, что это спасет кого-то еще от разочарования, которое я испытал.