Skip to main content

Deploy Rails

Servers • Asked by Artem Kiryanov

Hi . Can you help me ? When i start : cap deploy production, i have errors:

  1. rake stdout: Nothing written
  2. rake stderr: syck has been removed, psych is used instead

How can i resolve them?


Can you paste the full logs? For #2, you are probably using something that uses an old YAML parser. Maybe need to update gems or something for it to get fixed.


My Gemfile:

group :production do
  gem 'pg'
   gem 'capistrano', '~> 3.3.0'
   gem 'capistrano-bundler', '~> 1.1.2'
   gem 'capistrano-rails', '~> 1.1'
   gem 'capistrano-rvm'
   gem 'sshkit'
end
My Capfile:
require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/bundler'
require 'capistrano/rails'


  require 'capistrano/rvm'
  set :rvm_type, :user
  set :rvm_ruby_version, '2.1.3-p242'


# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

My config/deploy.rb

set :default_env, {
 :PATH => '/home/deploy/.rvm/gems/ruby-2.1.3-p242/bin:/home/deploy/.rvm/gems/[email protected]/bin:/home/deploy/.rvm/rubies/ruby-2.1.3-p242/bin:/home/deploy/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games'
} 
set :application, 'lifeblog'
set :repo_url, '[email protected]:hacker342/lifeblog.git'
  set :deploy_to, '/home/deploy/lifeblog'
 set :linked_files, %w{config/database.yml}
 set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

namespace :deploy do

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      # Your restart mechanism here, for example:
       execute :touch, release_path.join('tmp/restart.txt')
    end
  end

  after :publishing,'deploy:restart'
  after :finishing, 'deploy:cleanup'

end

My config/deploy/production.rb

role :app, %w{[email protected]}
role :web, %w{[email protected]}
role :db,  %w{[email protected]}


# Extended Server Syntax
# ======================
# This can be used to drop a more detailed server definition into the
# server list. The second argument is a, or duck-types, Hash and is
# used to set extended properties on the server.

set :stage, :production

server '104.236.45.52', user: 'deploy', roles: %w{web app} 

I fixed my 1 and 2 problem, but, when i put cap production deploy, i have error:

(Backtrace restricted to imported tasks)
cap aborted!
Don't know how to build task 'deploy:setup'

Okey, i fixed this problem, but i have new error:

The deploy has failed with an error: Exception while executing on host 104.236.45.52: rake exit status: 1
rake stdout: Nothing written
rake stderr: syck has been removed, psych is used instead
PG::ConnectionBad: could not connect to server: Connection refused
    Is the server running on host "104.236.45.52" and accepting
    TCP/IP connections on port 5432?

That last bit is basically just saying that it can't find a running Postgres server on that IP address. Make sure it's running on your server and that you've got the right IP. If you are running Postgres on the same server as Rails, you can use 127.0.0.1 instead of the server's IP address so it can just connect locally.


Okey , Thank you! I fixed that lost error, i reinstall capistrano and droplet, but when i cap production deploy, i have error:

cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host 104.236.45.52: bundle exit status: 16
bundle stdout: Nothing written
bundle stderr: Nothing written
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/command.rb:97:in `exit_status='
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:148:in `block (5 levels) in _execute'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/channel.rb:551:in `call'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/channel.rb:551:in `do_request'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:561:in `channel_request'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:465:in `dispatch_incoming_packets'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:221:in `preprocess'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:205:in `process'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:169:in `block in loop'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:169:in `loop'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:169:in `loop'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/channel.rb:269:in `wait'
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:170:in `block (3 levels) in _execute'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/channel.rb:514:in `call'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/channel.rb:514:in `do_open_confirmation'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:545:in `channel_open_confirmation'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:465:in `dispatch_incoming_packets'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:221:in `preprocess'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:205:in `process'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:169:in `block in loop'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:169:in `loop'
/home/rails/.rvm/gems/ruby-2.1.3/gems/net-ssh-2.9.1/lib/net/ssh/connection/session.rb:169:in `loop'
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:172:in `block (2 levels) in _execute'
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:186:in `with_ssh'
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:131:in `block in _execute'
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:128:in `tap'
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:128:in `_execute'
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:66:in `execute'
/home/rails/.rvm/gems/ruby-2.1.3/gems/capistrano-bundler-1.1.3/lib/capistrano/tasks/bundler.cap:35:in `block (5 levels) in '
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/backends/abstract.rb:85:in `with'
/home/rails/.rvm/gems/ruby-2.1.3/gems/capistrano-bundler-1.1.3/lib/capistrano/tasks/bundler.cap:26:in `block (4 levels) in '
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/backends/abstract.rb:77:in `within'
/home/rails/.rvm/gems/ruby-2.1.3/gems/capistrano-bundler-1.1.3/lib/capistrano/tasks/bundler.cap:25:in `block (3 levels) in '
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:54:in `instance_exec'
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/backends/netssh.rb:54:in `run'
/home/rails/.rvm/gems/ruby-2.1.3/gems/sshkit-1.5.1/lib/sshkit/runners/parallel.rb:13:in `block (2 levels) in execute'
SSHKit::Command::Failed: bundle exit status: 16
bundle stdout: Nothing written
bundle stderr: Nothing written

Okey. I fixed this problem. How can i fixed ?
First ! Open ssh server and put command: which ruby and copy this.

  1. Open rails_app on my local machine and open deploy.rb , and paste line from terminal
set :default_env, {
    :PATH => '/home/deployer/.rvm/gems/ruby-2.0.0-p353/bin:/home/deployer/.rvm/gems/[email protected]/bin:/home/deployer/.rvm/rubies/ruby-2.0.0-p353/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/deployer/.rvm/bin'
}

And git add and commit , then cap production deploy


Good find! I've had to do that a couple times before but I can't remember the exact situation that required setting the env. This is good to note and hopefully helpful for other people running into similar problems.


Okey, Chris! But, I can't fix this problem. When i open my site, i see 403 error . Why?
My nginx.log

2014/12/02 02:18:30 [error] 6712#0: *24 directory index of "/home/deploy/lifeblog/current/public/" is forbidden, client: 66.249.69.153, server: www.artkiryanov.ru, request: "GET / HTTP/1.1", host: "artkiryanov.ru"
2014/12/02 02:50:39 [error] 6712#0: *25 directory index of "/home/deploy/lifeblog/current/public/" is forbidden, client: 93.125.59.125, server: www.artkiryanov.ru, request: "GET / HTTP/1.1", host: "artkiryanov.ru"

And My /etc/nginx/sites-enabled/default

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        server_name www.artkiryanov.ru  artkiryanov.ru
        passenger_enabled on;
        rails_env production;
        root /home/deploy/lifeblog/current/public;


        # Make site accessible from http://localhost
#       error_page 500 502 503 504 /50x.html;
#       location = /50x.html {
#               root html;
#       }
}

How can I solve the problem ?


Chris! I fixed my problem! How?

First! Open /etc/nginx/sites-enabled/default and comment location directory
It is my settings

server {
        listen 80;
        server_name www.artkiryanov.ru artkiryanov.ru
        rails_env production;
        passenger_use_global_queue on;
        root /home/deploy/lifeblog/current/public;
        passenger_enabled on;

#       # Make site accessible from http://localhost
#       error_page 500 502 503 504 /50x.html;
#       location = / {
#           passenger_enabled on;
#
#       }
}

And Restart nginx! Nice! Work!


Login or Create An Account to join the conversation.

Subscribe to the newsletter

Join 27,623+ developers who get early access to new screencasts, articles, guides, updates, and more.

    By clicking this button, you agree to the GoRails Terms of Service and Privacy Policy.

    More of a social being? We're also on Twitter and YouTube.