Ruby issue when doing cap deploy production
Hi, I'm following the Deploy Rails guide.
However, when I run
cap production deploy
I'm getting this error message:
$cap production deploy
DEBUG[be6b6bd6] Running /usr/bin/env [ -d ~/.rbenv/versions/2.0.0-p451 ] on 95.85.5.6
DEBUG[be6b6bd6] Command: [ -d ~/.rbenv/versions/2.0.0-p451 ]
DEBUG[be6b6bd6] Finished in 1.060 seconds with exit status 1 (failed).
ERRORrbenv: 2.0.0-p451 is not installed or not found in ~/.rbenv/versions/2.0.0-p451
cap aborted!
Not sure what's going on. I guess it has something to do with incompatible versions of Ruby, but is it the Ruby version on my local machine or on the VPS?
thanks for your help,
Anthony
That error says that on the server the ruby version you have doesn't match the one you set in your Capfile
. You'll want to make sure the version in this file matches the version of Ruby on the server.
I see,
I changed the version in my Capfile to :
set :rbenv_ruby, '2.1.2-p95'
but now, when I run
cap production deploy
I get the error:
$cap production deploy
DEBUG[d2d51431] Running /usr/bin/env [ -d ~/.rbenv/versions/2.1.2-p95 ] on 95.85.5.6
DEBUG[d2d51431] Command: [ -d ~/.rbenv/versions/2.1.2-p95 ]
DEBUG[d2d51431] Finished in 0.980 seconds with exit status 1 (failed).
ERRORrbenv: 2.1.2-p95 is not installed or not found in ~/.rbenv/versions/2.1.2-p95
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host 95.85.5.6: exit
/Users/acandael/Sites/posplus/vendor/bundle/bundler/gems/rbenv-2332dba20ec1/lib/capistrano/tasks/rbenv.rake:12:in `exit'
/Users/acandael/Sites/posplus/vendor/bundle/bundler/gems/rbenv-2332dba20ec1/lib/capistrano/tasks/rbenv.rake:12:in `block (3 levels) in <top (required)>'
/Users/acandael/Sites/posplus/vendor/bundle/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:54:in `instance_exec'
/Users/acandael/Sites/posplus/vendor/bundle/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:54:in `run'
/Users/acandael/Sites/posplus/vendor/bundle/gems/sshkit-1.5.1/lib/sshkit/runners/parallel.rb:13:in `block (2 levels) in execute'
SystemExit: exit
/Users/acandael/Sites/posplus/vendor/bundle/bundler/gems/rbenv-2332dba20ec1/lib/capistrano/tasks/rbenv.rake:12:in exit'
block (3 levels) in '
/Users/acandael/Sites/posplus/vendor/bundle/bundler/gems/rbenv-2332dba20ec1/lib/capistrano/tasks/rbenv.rake:12:in
/Users/acandael/Sites/posplus/vendor/bundle/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:54:in instance_exec'
run'
/Users/acandael/Sites/posplus/vendor/bundle/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:54:in
/Users/acandael/Sites/posplus/vendor/bundle/gems/sshkit-1.5.1/lib/sshkit/runners/parallel.rb:13:in `block (2 levels) in execute'
Tasks: TOP => rbenv:validate
(See full trace by running task with --trace)
I don't understand this, I ran 'ruby -v' on my Digital Ocean vps and it told me the Ruby version is:
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
greetings,
Anthony
If you type this command, what is the output? ls ~/.rbenv/versions/2.1.2-p95
Also, type which ruby
and make sure the output is /home/deploy/.rbenv/shims/ruby
Hi Chris,
when I run the command as deploy user on the vps
which ~/.rbenv/versions/2.1.2-p95
I get no output, just a new cursor line
when I run
which ruby
I get
/home/deploy/.rbenv/shims/ruby
when I run
ruby -v
I get
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
I also try to solve the issue by changing the line in my Capfile from
set :rbenv_ruby, '2.1.2-p95'
to
set :rbenv_ruby, '2.1.2p95'
but that didn't fix it.
The second answer is good, shows that it's loaded rbenv correctly.
My bad on that first one, I meant ls ~/.rbenv/versions/2.1.2-p95
when I run
ls ~/.rbenv/versions/2.1.2-p95
on the vps, I get
ls: cannot access /home/deploy/.rbenv/versions/2.1.2-p95: No such file or directory
Well hmm, that's potentially your problem. That folder should exist to store your Ruby version in. I'm also running 2.1.2p25 on my machine, but I only have a ~/.rbenv/versions/2.1.2
folder.
Try using this instead:
set :rbenv_ruby, '2.1.2'
ok,
using
set :rbenv_ruby, '2.1.2'
fixed it.
However now I'm running in this error:
[62800640] Warning: Permanently added 'github.com,some id' (RSA) to the list of known hosts.
DEBUG[62800640] Permission denied (publickey).
DEBUG[62800640] fatal: Could not read from remote repository.
DEBUG[62800640]
DEBUG[62800640] Please make sure you have the correct access rights
DEBUG[62800640] and the repository exists.
DEBUG[62800640] Finished in 0.745 seconds with exit status 128 (failed).
Cool, so that's fixed. You'll need to check your git repo in the config to make sure it exists and/or add the forward_agent option to use your local keys for grabbing the code to the server from Github.
ok, again one step further
I ran
ssh-add ~/.ssh/id_rsa
in the terminal
and ran a new
cap deploy production
the deploy proces moved on, but then it failed with
Finished in 0.029 seconds with exit status 1 (failed).
ERRORlinked file /home/deploy/posplus/shared/config/database.yml does not exist on 95.85.5.6
I guess this has to do with the issue about creating the Postgres user which I reported about on this forum under the thread 'setup Postgres user fails'
You'll need to create the database.yml with a production config on the server in the folder that it mentions there since you don't have it in your repository. And yes, it'll need the configuration to postgres that you mentioned in the other thread.
Moved on again with the deployment proces, but the deployment still fails. Now there seems to be a problem with the bundle command
DEBUG[020e32cd] Command: cd /home/deploy/posplus/releases/20140904144347 && ( RBENV_ROOT=~/.rbenv RBENV_VERSION=2.1.2 ~/.rbenv/bin/rbenv exec bundle install --binstubs /home/deploy/posplus/shared/bin --path /home/deploy/posplus/shared/bundle --without development test --deployment --quiet )
DEBUG[020e32cd] rbenv: bundle: command not found
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host 95.85.5.6: bundle exit status: 127
bundle stdout: Nothing written
bundle stderr: rbenv: bundle: command not found
this is harder then I thought, I installed the bundler gem and now the next error is:
DEBUG[a18e2f6c] rake aborted!
DEBUG[a18e2f6c] ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
DEBUG[a18e2f6c] /home/deploy/posplus/shared/bundle/ruby/2.1.0/gems/execjs-2.2.1/lib/execjs/runtim
Googled this issue, seems I have to install Node.js with:
sudo apt-get install nodejs
ok, now I guess I ran into the Posgres issue, I reported on:
DEBUG[00c3d123] rake aborted!
DEBUG[00c3d123] ActiveRecord::AdapterNotSpecified: 'production' database is not configured. Available: []
I tried to solve this by adding settings for the production server in my local config.database.yml file
production:
database: <database>
adapter: postgresql
encoding: unicode
pool: 5
username: <username>
password: <password>
but I keep getting the same error message:
rake aborted!
DEBUG[ffcbeda7] ActiveRecord::AdapterNotSpecified: 'production' database is not configured. Available: []
DEBUG[ffcbeda7] /home/deploy/posplus/shared/bundle/ruby/2.1.0/gems/activerecord- 4.1.1/lib/active_record/connection_adapters/connection_specification.rb:257:in `resolve_symbol_connection'
I configured the production database and now the capistrano script is passing the production database error.
Now I'm bumping into another error:
rake aborted!
DEBUG[53a69508] ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key
DEBUG[53a69508] /home/deploy/posplus/shared/bundle/ruby/2.1.0/gems/fog-core-1.22.0/lib/fog/core/service.rb:237:in `validate_options'
I guess this errror is related to the fact that my app is using Carrierwave and Fog and is storing uploaded images to Amazon S3.
Does this errror mean I should create Environment Variables for aws_access_key_id and aws_secret_access_key?
thanks for your help,
Anthony
I tried to add the environment variables to my vps environment with:
export S3_KEY='my key ...'
export S3_SECRET='my secret key'
but I'm keep getting the same error when I run 'cap production deploy':
DEBUG[4f41f85f] rake aborted!
DEBUG[4f41f85f] ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key
DEBUG[4f41f85f] /home/deploy/posplus/shared/bundle/ruby/2.1.0/gems/fog-core-1.22.0/lib/fog/core/service.rb:237:in `validate_options'
If you're using Rails 4.1, you can use secrets.yml to set these variables or you can set them in the nginx configuration: https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html#about_environment_variables