Hey guys,
So here’s the deal…
I’m trying to deploy an app on EC2 using the EC2onRails gem…
I’m using git as my SCM and capistrano to deploy obviously…
Everytime I try to deploy with this command: cap deploy:cold, I get
the following error output on my terminal window:
bas1-stlambert20-1178037070:snaproof exponenth$ cap deploy:cold
- executing `deploy:cold’
- executing `deploy:update’
** transaction: start - executing `deploy:update_code’
updating the cached checkout on all servers
executing locally: “git ls-remote [email protected]:lpdahito/
snaproof.git master” - executing “if [ -d /mnt/app/shared/cached-copy ]; then cd /mnt/app/
shared/cached-copy && git fetch -q origin && git reset -q --hard
d5b088e509dcc4b476836b5bab0203ce5d4618f9; else git clone -q
[email protected]:lpdahito/snaproof.git /mnt/app/shared/cached-copy &&
cd /mnt/app/shared/cached-copy && git checkout -q -b deploy
d5b088e509dcc4b476836b5bab0203ce5d4618f9; fi”
servers: [“ec2-75-101-235-89.compute-1.amazonaws.com”]
[ec2-75-101-235-89.compute-1.amazonaws.com] executing command
** [ec2-75-101-235-89.compute-1.amazonaws.com :: out] Permission
denied (publickey).
** [ec2-75-101-235-89.compute-1.amazonaws.com :: out] fatal: The
remote end hung up unexpectedly
** [ec2-75-101-235-89.compute-1.amazonaws.com :: out] fetch-pack from
‘[email protected]:lpdahito/snaproof.git’ failed.
command finished
*** [deploy:update_code] rolling back - executing “rm -rf /mnt/app/releases/20090531003111; true”
servers: [“ec2-75-101-235-89.compute-1.amazonaws.com”]
[ec2-75-101-235-89.compute-1.amazonaws.com] executing command
command finished
failed: “sh -c "if [ -d /mnt/app/shared/cached-copy ]; then cd /mnt/
app/shared/cached-copy && git fetch -q origin && git reset -q --hard
d5b088e509dcc4b476836b5bab0203ce5d4618f9; else git clone -q
[email protected]:lpdahito/snaproof.git /mnt/app/shared/cached-copy &&
cd /mnt/app/shared/cached-copy && git checkout -q -b deploy
d5b088e509dcc4b476836b5bab0203ce5d4618f9; fi"” on
ec2-75-101-235-89.compute-1.amazonaws.com
If you’re looking for my capistrano recipe, here it is:
This is a sample Capistrano config file for EC2 on Rails.
It should be edited and customized.
set :application, “snaproof”
set :scm, “git”
set :repository, “[email protected]:lpdahito/snaproof.git”
set :scm_passphrase, “”
set :user, “Louis-Pierre D.”
ssh_options[:forward_agent] = true
set :branch, “master”
set :deploy_via, :remote_cache
default_run_options[:pty] = true
NOTE: for some reason Capistrano requires you to have both the
public and
the private key in the same folder, the public key should have the
extension “.pub”.
ssh_options[:keys] = [“#{ENV[‘HOME’]}/.ec2/lpdahito.pem”]
Your EC2 instances. Use the ec2-xxx…amazonaws.com hostname, not
any other name (in case you have your own DNS alias) or it won’t
be able to resolve to the internal IP address.
role :web, “ec2-75-101-235-89.compute-1.amazonaws.com”
role :app, “ec2-75-101-235-89.compute-1.amazonaws.com”
role :memcache, “ec2-75-101-235-89.compute-1.amazonaws.com”
role :db, “ec2-75-101-235-89.compute-1.amazonaws.com”, :primary
=> true
role :db, "ec2-56-xx-xx-
xx.z-1.compute-1.amazonaws.com", :primary => true, :ebs_vol_id =>
‘vol-12345abc’
optinally, you can specify Amazon’s EBS volume ID if the database is
persisted
via Amazon’s EBS. See the main README for more information.
Whatever you set here will be taken set as the default RAILS_ENV
value
on the server. Your app and your hourly/daily/weekly/monthly scripts
will run with RAILS_ENV set to this value.
set :rails_env, “production”
EC2 on Rails config.
NOTE: Some of these should be omitted if not needed.
set :ec2onrails_config, {
S3 bucket and “subdir” used by the ec2onrails:db:restore task
NOTE: this only applies if you are not using EBS
:restore_from_bucket => “your-bucket”,
:restore_from_bucket_subdir => “database”,
S3 bucket and “subdir” used by the ec2onrails:db:archive task
This does not affect the automatic backup of your MySQL db to S3,
it’s
just for manually archiving a db snapshot to a different bucket
if
desired.
NOTE: this only applies if you are not using EBS
:archive_to_bucket => “your-other-bucket”,
:archive_to_bucket_subdir => “db-archive/#{Time.new.strftime(‘%Y-%m-
%d–%H-%M-%S’)}”,
Set a root password for MySQL. Run "cap
ec2onrails:db:set_root_password"
to enable this. This is optional, and after doing this the
ec2onrails:db:drop task won’t work, but be aware that MySQL
accepts
connections on the public network interface (you should block the
MySQL
port with the firewall anyway).
If you don’t care about setting the mysql root password then
remove this.
Any extra Ubuntu packages to install if desired
If you don’t want to install extra packages then remove this.
:packages => [“logwatch”, “imagemagick”],
Any extra RubyGems to install if desired: can be “gemname” or if
a
particular version is desired “gemname -v 1.0.1”
If you don’t want to install extra rubygems then remove this
NOTE: if you are using rails 2.1, ec2onrails calls 'sudo rake
gem:install’,
which will install gems defined in your rails configuration
:rubygems => [“rmagick”, “rfacebook -v 0.9.7”],
extra security measures are taken if this is true, BUT it makes
initial
experimentation and setup a bit tricky. For example, if you do
not
have your ssh keys setup correctly, you will be locked out of your
server after 3 attempts for upto 3 months.
:harden_server => false,
#if you want to harden the server, or setup email signing, you will
need to set the domain
#if you use Capistrano’s multistage extension (recommended!), you
can add a line like this to your
#environment specific file:
ec2onrails_config[:service_domain] = ‘staging.mydomain.com’
:service_domain => nil,
Set the server timezone. run "cap -e
ec2onrails:server:set_timezone" for
details
:timezone => “UTC”,
Files to deploy to the server (they’ll be owned by root). It’s
intended
mainly for customized config files for new packages installed via
the
ec2onrails:server:install_packages task. Subdirectories and files
inside
here will be placed in the same structure relative to the root of
the
server’s filesystem.
If you don’t need to deploy customized config files to the server
then
remove this.
:server_config_files_root => “…/server_configs”,
If config files are deployed, some services might need to be
restarted.
If you don’t need to deploy customized config files to the server
then
remove this.
:services_to_restart => %w(postfix sysklogd),
Set an email address to forward admin mail messages to. If you
don’t
want to receive mail from the server (e.g. monit alert messages)
then
remove this.
:mail_forward_address => “[email protected]”,
Set this if you want SSL to be enabled on the web server. The SSL
cert
and key files need to exist on the server, The cert file should be
in
/etc/ssl/certs/default.pem and the key file should be in
/etc/ssl/private/default.key (see :server_config_files_root).
:enable_ssl => true
}
I just don’t know what I’m doing wrong !!! Wasn’t I be supposed to
deploy my app in 5 minutes lol…
Please someone I need help !
Thx
Louis-Pierre