pablomarti
pablomarti

Reputation: 2107

Deploying Rails App on AWS EC2 with Capistrano

I'm trying to deploy a Rails App with Capistrano on an AWS-EC2 instance, with the default user (Ubuntu) in another user's home but it gaves me a "Permission Denied" error. This is my code:

server "9.9.9.9", :web, :app, :db, primary: true

set :application, "some_app"
set :user, "ubuntu"
set :keep_releases, 3
set :location, "9.9.9.9"
ssh_options[:keys] = ["~/Keys/serverkey.pem"]
ssh_options[:forward_agent] = true
default_run_options[:pty] = true
set :use_sudo, false

task :hello do
  run "echo 'Hello World' > /home/other_user/i_was_here.txt"
end

And this is the output:

$ cap hello
  * 2013-03-22 14:11:29 executing `hello'
  * executing "echo 'Hello World' > /home/other_user/i_was_here.txt"
    servers: ["9.9.9.9"]
    [9.9.9.9] executing command
 ** [out :: 9.9.9.9] sh: cannot create /home/other_user/i_was_here.txt: Permission denied
    command finished in 798ms
failed: "sh -c 'echo '\\''Hello World'\\'' > /home/other_user/i_was_here.txt'" on 9.9.9.9

What could be wrong? The purpose is to deploy a Rails App for another user, so I have some doubts:

  1. Is there a way to deploy the Rails App on an AWS-EC2 instance directly with the other user?
  2. If the answer for #1 is "no", what is the right way to deploy the Rails App with the default user Ubuntu for other users? (for no having problems with permissions in the future when the other users try to access to the apps)

In the server are managed many users because we want to get the storage and bandwidth for each user, so we did it this way and until today we are starting with Capistrano haha.

Thanks in advance.

Upvotes: 0

Views: 2215

Answers (4)

pablomarti
pablomarti

Reputation: 2107

Thank you everyone for your answers. What I did was follow this steps and connect with Capistrano with the specific user.

http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/

Upvotes: 1

Jeevan Dongre
Jeevan Dongre

Reputation: 4649

Remove ssh_options[:forward_agent] = true line from your config file, even I had the same issue I removed this line and its working fine for me now

Upvotes: 1

Chris Aitchison
Chris Aitchison

Reputation: 4654

The ubuntu user does not have permission to access other_user's home directory, unless sudo is used, or you change the permissions on /home/other_user.

The best approach, if you want to run the app as other_user, is to configure capistrano to deploy as other_user. You'll need to add your public ssh key to /home/other_user/.ssh/authorized_keys. If you want the app to run as ubuntu, deploy to /home/ubuntu.

Upvotes: 0

iltempo
iltempo

Reputation: 16012

The usual is to deploy as the user that should run/maintain the application. Otherwise you have to really be sure both users are not messing around with the permissions.

Is the reason for this scenario is that you don't want to share credentials? If so, consider using a special deploy ssh key that is added to .ssh/authorized_keys for every user.

Upvotes: 1

Related Questions