gpt4 book ai didi

使用Amazon RDS进行部署时,Capistrano超时

转载 作者:行者123 更新时间:2023-12-04 04:52:20 25 4
gpt4 key购买 nike

我似乎无法让Capistrano在AmazonRDS上表现出色。我到处寻找有关正确设置此设置的任何信息,但没有找到任何信息。现在,当我cap deploy时,该过程超时。

这是我的deploy.rb:

set :deploy_to, "/opt/bitnami/apps/annarbortshirtcompany.com/cms/" 
set :scm, :git
set :repository, "ssh://user@ec2-repository.compute-1.amazonaws.com/~/repo/cms.git"
set :deploy_via, :remote_cache

set :user, "user"
ssh_options[:keys] = [File.join(ENV["HOME"], "EC2", "admin.pem")]
ssh_options[:forward_agent] = true
set :branch, "master"
set :use_sudo, true

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

# 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 "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
end
end

RDS数据库实例的用户名不同于此处设置的SSH用户名,但在我的database.yml中定义。我认为capistrano可能不会读取此内容,但不知道如何实现。

当我“上限部署”时:
ubuntu@ubuntu-VirtualBox:~/RailsApps/cms$ cap deploy
* executing `deploy'
* executing `deploy:update'
** transaction: start
* executing `deploy:update_code'
updating the cached checkout on all servers
executing locally: "git ls-remote ssh://user@ec2-repository.compute-1.amazonaws.com/~/repo/cms.git master"
command finished in 1590ms
* executing "if [ -d /app-directory/shared/cached-copy ]; then cd /app-directory/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard ffc4ec7762566f801c4a9140aa3980dc71e3d06f && git clean -q -d -x -f; else git clone -q ssh://user@ec2-repository.amazonaws.com/~/repo/cms.git /app-directory/shared/cached-copy && cd /app-directory/shared/cached-copy && git checkout -q -b deploy ffc4ec7762566f801c4a9140aa3980dc71e3d06f; fi"
servers: ["ec2-webserver.compute-1.amazonaws.com", "dbinstance.us-east1.rds.amazonaws.com"]
*** [deploy:update_code] rolling back
* executing "rm -rf /app-directory/releases/20110607161612; true"
servers: ["ec2-webserver.compute-1.amazonaws.com", "dbinstance.us-east1.rds.amazonaws.com"]
** [deploy:update_code] exception while rolling back: Capistrano::ConnectionError, connection failed for: dbinstance.us-east1.rds.amazonaws.com (Errno::ETIMEDOUT: Connection timed out - connect(2))
connection failed for: dbinstance.us-east1.rds.amazonaws.com (Errno::ETIMEDOUT: Connection timed out - connect(2))

为什么要“更新所有服务器上的缓存结帐”?此时甚至不需要DB服务器。我为如何解决这个问题而感到困惑。希望有人可以指出正确的方向!

最佳答案

我确实遇到了这个问题,并为此苦苦挣扎,因为我不好意思说这是一个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的RDBMS上运行。您只需要确保为目标数据库设置了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

有道理?

我希望这可以避免别人遇到的挫折感。
  • 大卫
  • 关于使用Amazon RDS进行部署时,Capistrano超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6269456/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com