Вы находитесь на странице: 1из 14

7/26/2017 Deploy Ruby On Rails on Ubuntu 16.

04 Xenial Xerus - GoRails

   
Series (/series) Screencasts (/episodes) Community (/forum) Account (/users/edit)

Deploy Ruby On Rails on


Ubuntu 16.04 Xenial Xerus
A guide to setting up a Ruby on Rails production environment

Ubuntu 16.04 (/deploy/ubuntu/16.04) Ubuntu 14.04 (/deploy/ubuntu/14.04) Ubuntu 12.04 (/deploy/ubuntu/12.04)

Want an automated way to con gure a server and deploy Rails apps to it? Check out Hatch! (https://hatch.gorails.com)

Deploy Ruby on Rails To Ubuntu Server

Overview

 This will take about 45 minutes.

We will be setting up a Ruby on Rails production environment on Ubuntu 16.04 LTS Xenial Xerus.

Since we setup Ubuntu for our development environment, we also want to use it in production. This keeps your application running consistently
between development and production. We're using an LTS version of Ubuntu in production because it is supported for several years where a normal
version of Ubuntu isn't.

Using Ubuntu LTS in production allows you to continue receiving security updates which is important for your production server(s).

We're going to be setting up a Droplet on Digital Ocean (https://www.digitalocean.com/?refcode=87fcb9dab7a3) for our server. It costs $5/mo and
is a great place to host your applications.

If you sign up with my Digital Ocean referral link (https://www.digitalocean.com/?refcode=87fcb9dab7a3), you'll get 2 months ($10) free credit
to try it out.

Creating A Virtual Private Server

You can use any cloud server hosting company you choose for your Rails application. I've had excellent experience with Digital Ocean
(https://www.digitalocean.com/?refcode=87fcb9dab7a3) and Linode (https://www.linode.com/?
r=a02b271802c33ff2f38b3d5335089d76648ca6c2) with the servers I have used. If you're looking for alternatives outside the US or otherwise, just

https://gorails.com/deploy/ubuntu/16.04 1/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails
google "VPS hosting". A VPS is a virtual private server. It's just like a server you setup at home, only virtualize and running with a suite of other
servers in a datacenter.

First, we need to choose which OS to use. We're going to be using Ubuntu 16.04 LTS x64. Your application may require a different OS or version, but
if you're not sure this is generally what you should use.

(https://gorails.com/assets/droplet-image-16.04-a565619112de1557e5e60640097671a4202f732dd87cbc92dd5924bd1ececb1f.png)

Since we're using Digital Ocean (https://www.digitalocean.com/?refcode=87fcb9dab7a3) for our cloud server, the rst thing we're going to do is
con gure a new one. I'm going with the Droplet with 1GB of RAM. You can setup whichever size server you prefer, keep in mind that if you choose a
512MB server you may run into some slowness with a low amount of RAM.

(https://gorails.com/assets/droplet-size-3751c8c849b2371987fd8e0b194c625c2ffae0a451a43b28682cbe1254c2ad8d.png)

The next step is to choose your location. Choose one close to you so that you can have better connection speeds.

(https://gorails.com/assets/droplet-region-0bc8eef1015fc1998ed2cbf666ded266765073cdd149f802377dc07fdd31be70.png)

Optionally you can add your SSH key into the Droplet so you can SSH in and skip the ssh-copy-id step.

Once Digital Ocean has con gured your server, check your email to get your password for the new cloud server.

You should follow the instructions in the email to login via SSH for the very rst time and verify it is working.

The rst thing we will do on our new server is create the user account we'll be using to run our applications and work from there.

https://gorails.com/deploy/ubuntu/16.04 2/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails

sudo adduser deploy


sudo adduser deploy sudo
su deploy

Before we move forward is that we're going to setup SSH to authenticate via keys instead of having to use a password to login. It's more secure and
will save you time in the long run.

We're going to use ssh-copy-id to do this. If you're on OSX you may need to run brew install ssh-copy-id but if you're following this tutorial
on Linux desktop, you should already have it.

Once you've got ssh-copy-id installed, run the following and replace IPADDRESS with the one for your server:

Make sure you run ssh-copy-id on your computer, and NOT the server.

ssh-copy-id deploy@IPADDRESS

Now when you run ssh deploy@IPADDRESS you will be logged in automatically. Go ahead and SSH again and verify that it doesn't ask for your
password before moving onto the next step.

For the next steps, make sure you are logged in as the deploy user on the server!

Installing Ruby

Choose the version of Ruby you want to install:

2.4.0 (Recommended)

The rst step is to install some dependencies for Ruby.

sudo apt-get update


sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1

Next we're going to be installing Ruby using one of three methods. Each have their own bene ts, most people prefer using rbenv these days, but if
you're familiar with rvm you can follow those steps as well. I've included instructions for installing from source as well, but in general, you'll want to
choose either rbenv or rvm.

Choose one method. Some of these con ict with each other, so choose the one that sounds the most interesting to you, or go with my suggestion,
rbenv.

Using rbenv (Recommended) Using rvm From source

Installing with rbenv is a simple two step process. First you install rbenv , and then ruby-build :

cd
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build


echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL

rbenv install 2.4.0


rbenv global 2.4.0
ruby -v

The last step is to install Bundler

https://gorails.com/deploy/ubuntu/16.04 3/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails

gem install bundler

rbenv users need to run rbenv rehash after installing bundler.

Installing Nginx

Phusion is the company that develops Passenger and they recently put out an of cial Ubuntu package that ships with Nginx and Passenger pre-
installed.

We'll be using that to setup our production server because it's very easy to setup.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7


sudo apt-get install -y apt-transport-https ca-certificates

# Add Passenger APT repository


sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger xenial main > /etc/apt/sources.list.d/passenger.list'
sudo apt-get update

# Install Passenger & Nginx


sudo apt-get install -y nginx-extras passenger

So now we have Nginx and passenger installed. We can manage the Nginx webserver by using the service command:

sudo service nginx start

Open up the server's IP address in your browser to make sure that nginx is up and running.

The service command also provides some other methods such as restart and stop that allow you to easily restart and stop your webserver.

Next, we need to update the Nginx con guration to point Passenger to the version of Ruby that we're using. You'll want to open up
/etc/nginx/nginx.conf in your favorite editor. I like to use vim , so I'd run this command:

sudo vim /etc/nginx/nginx.conf

# You could also use nano if you don't like vim


# sudo nano /etc/nginx/nginx.conf

Find the following lines, and uncomment them:

##
# Phusion Passenger
##
# Uncomment it if you installed ruby-passenger or ruby-passenger-enterprise
##

include /etc/nginx/passenger.conf;

Save and close nginx.conf. Then open /etc/nginx/passenger.conf in your editor to modify the ruby line:

sudo vim /etc/nginx/passenger.conf

# You could also use nano if you don't like vim


# sudo nano /etc/nginx/passenger.conf

And change the passenger_ruby line to point to your ruby executable:

passenger_ruby /home/deploy/.rbenv/shims/ruby; # If you use rbenv


# passenger_ruby /home/deploy/.rvm/wrappers/ruby-2.1.2/ruby; # If use use rvm, be sure to change the version number
# passenger_ruby /usr/bin/ruby; # If you use ruby from source

https://gorails.com/deploy/ubuntu/16.04 4/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails

The passenger_ruby is the important line here. Make sure you only set this once and use the line from the example that pertains to the version of
Ruby you installed.

Once you've changed passenger_ruby to use the right version Ruby, you can run the following command to restart Nginx with the new Passenger
con guration.

sudo service nginx restart

Now that we've restarted Nginx, the Rails application will be served up using the deploy user just how we want. In the Capistrano section we will talk
about con guring Nginx to serve up your Rails application.

MySQL and PostgreSQL Database Setup

Setting up your production database is pretty easy. Make sure to keep in mind that you should use a different password for your production
databases.

Depending on what database you want to use, follow the steps related to the database:

Installing MySQL
All you need to do in order to install MySQL is to run the following command:

sudo apt-get install mysql-server mysql-client libmysqlclient-dev

You can use the root user and password set during installation for your database or you can add a new user
(https://www.digitalocean.com/community/articles/how-to-create-a-new-user-and-grant-permissions-in-mysql) to MySQL.

Make sure you also create your app's database now. If you're not sure how to do this, follow this guide to create your mysql database
(https://wiki.gandi.net/en/hosting/using-linux/tutorials/ubuntu/createdatabase). Take note of your database name and password so you can use this
when we setup the database.yml le later on.

Installing PostgreSQL
Postgres 9.3 is available in the Ubuntu repositories and we can install it like so:

sudo apt-get install postgresql postgresql-contrib libpq-dev

Next we need to setup our postgres user (also named "deploy" but different from our linux user named "deploy") and database:

sudo su - postgres
createuser --pwprompt deploy
createdb -O deploy my_app_name_production # change "my_app_name" to your app's name which we'll also use later on
exit

The password you type in here will be the one to put in your my_app/current/config/database.yml later when you deploy your app for the rst
time.

Capistrano Setup

For Capistrano, make sure you do these steps on your development machine inside your Rails app.

The rst step is to add Capistrano to your Gemfile :

https://gorails.com/deploy/ubuntu/16.04 5/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails

gem 'capistrano', '~> 3.7', '>= 3.7.1'


gem 'capistrano-rails', '~> 1.2'
gem 'capistrano-passenger', '~> 0.2.0'

# Add this if you're using rbenv


# gem 'capistrano-rbenv', '~> 2.1'

# Add this if you're using rvm


# gem 'capistrano-rvm'

Once these are added, run the following command to generate your capistrano con guration.

cap install STAGES=production

Next we need to make some additions to our Cap le to include bundler, rails, and rbenv/rvm (if you're using them). Edit your Capfile and add these
lines:

require 'capistrano/rails'
require 'capistrano/passenger'

# If you are using rbenv add these lines:


# require 'capistrano/rbenv'
# set :rbenv_type, :user
# set :rbenv_ruby, '2.4.0'

# If you are using rvm add these lines:


# require 'capistrano/rvm'
# set :rvm_type, :user
# set :rvm_ruby_version, '2.4.0'

After we've got Capistrano installed, we can con gure the config/deploy.rb to setup our general con guration for our app. Edit that le and make
it like the following replacing "myapp" with the name of your application and git repository:

set :application, "my_app_name"


set :repo_url, "git@example.com:me/my_repo.git"

set :deploy_to, '/home/deploy/my_app_name'

append :linked_files, "config/database.yml", "config/secrets.yml"


append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "vendor/bundle", "public/system", "public/uploads"

Now we need to open up our config/deploy/production.rb le to set the server IP address that we want to deploy to:

# Replace 127.0.0.1 with your server's IP address!


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

If you have any trouble with Capistrano or the extensions for it, check out Capistrano's Github page (https://github.com/capistrano/).

Final Steps

Thankfully there aren't a whole lot of things to do left!

Adding The Nginx Host


In order to get Nginx to respond with the Rails app, we need to modify it's sites-enabled.

Open up /etc/nginx/sites-enabled/default in your text editor and we will replace the le's contents with the following:

https://gorails.com/deploy/ubuntu/16.04 6/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails

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

server_name mydomain.com;
passenger_enabled on;
rails_env production;
root /home/deploy/my_app_name/current/public;

# redirect server error pages to the static page /50x.html


error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

This is our Nginx con guration for a server listening on port 80. You need to change the server_name values to match the domain you want to use
and in root replace "myapp" with the name of your application.

Connecting The Database


One optional thing I would recommend is to remove your config/database.yml and config/secrets.yml git and only store example copies in
your git repo. This way we can easily copy the les for setting up development, but our production environment can symlink les on the server so
that our production secrets and passwords are only stored on the production server.

First we'll move these les to their example names in the git repo.

echo "config/database.yml\nconfig/secrets.yml" >> .gitignore


git add .gitignore
git mv config/secrets.yml config/secrets.yml.example
git mv config/database.yml config/database.yml.example
git commit -m "Only store example secrets and database configs"
cp config/secrets.yml.example config/secrets.yml
cp config/database.yml.example config/database.yml

You can run cap production deploy to deploy your application, but it's going to fail this rst time because we haven't created either of these les
on the server which we will do in just a second.

linked file /home/deploy/build.gorails.com/shared/config/database.yml does not exist on IP_ADDRESS

One last time, ssh into your server as the deploy user and this time we need to create two les. First is the database.yml that uses the password
for the postgres user you created earlier.

# /home/deploy/my_app_name/shared/config/database.yml
production:
adapter: postgresql
host: 127.0.0.1
database: my_app_name_production
username: deploy
password: YOUR_POSTGRES_PASSWORD
encoding: unicode
pool: 5

Now we create secrets.yml . We need to run rake secret on your development machine and take the secret key output of that and paste that in
as YOUR_SECRET_KEY on the server.

# /home/deploy/my_app_name/shared/config/secrets.yml
production:
secret_key_base: YOUR_SECRET_KEY

You can run cap production deploy one last time to get your full deployment to run. This should completed successfully and you should see your
new site live! You can just run Capistrano again to deploy any new changes you've pushed up to your Git repository.

Restarting The Site


https://gorails.com/deploy/ubuntu/16.04 7/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails

Restarting The Site


One last thing you should know is that restarting just the Rails application with Passenger is very easy. If you ssh into the server, you can run touch
my_app_name/current/tmp/restart.txt and Passenger will restart the application for you. It monitors the le's timestamp to determine if it should
restart the app. This is helpful when you want to restart the app manually without deploying it.

Conclusion
And there you have it, a very long-winded explanation of all the different things you need to do while setting up an application to be deployed. There
is a lot of system administration pieces that can expand upon this, but that's for another time. Please let me know if you have any questions,
comments, or suggestions!

75 Comments GoRails  Ashok Allu

Sort by Best
 Recommend 6 ⤤ Share

Join the discussion…

Ian Hoffman • a year ago


After following this tutorial, I'm still getting the default "Welcome to nginx" page
5△ ▽ • Reply • Share ›

Raman Bedi > Ian Hoffman • 4 days ago


You'll need to restart nginx again to get the site up and running.
△ ▽ • Reply • Share ›

Somar Mulhem • a year ago


Chirs this video is great !!!
would you please publish a similar video with deploy rails on unicorn and nginx with good explain about the config!
thanks )
5△ ▽ • Reply • Share ›

Alex Hendershott • 7 months ago


Great tutorial. Everything went well, but when I do cap deploy production, I get the error below. Any ideas? Thank you!

cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as deploy@redacted: passenger-config exit status: 1
passenger-config stdout: Nothing written
passenger-config stderr: *** ERROR: Phusion Passenger doesn't seem to be running. If you are sure that it
is running, then the causes of this problem could be one of:

1. You customized the instance registry directory using Apache's


PassengerInstanceRegistryDir option, Nginx's
passenger_instance_registry_dir option, or Phusion Passenger Standalone's
--instance-registry-dir command line argument. If so, please set the
environment variable PASSENGER_INSTANCE_REGISTRY_DIR to that directory
and run this command again.
2. The instance directory has been removed by an operating system background
service. Please set a different instance registry directory using Apache's
PassengerInstanceRegistryDir option, Nginx's passenger_instance_registry_dir
option, or Phusion Passenger Standalone's --instance-registry-dir command
line argument.
2△ ▽ • Reply • Share ›

https://gorails.com/deploy/ubuntu/16.04 8/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails

David Jarillo > Alex Hendershott • a month ago


yes I had the same issue, any solutions?
1△ ▽ • Reply • Share ›

Eric > Alex Hendershott • 10 hours ago


Getting the same issue -- anyone solve?
△ ▽ • Reply • Share ›

rajesh sah > Alex Hendershott • 4 months ago


I had the same issue, I had missed to uncomment "include /etc/nginx/passenger.conf;" and server_name was not proper. after fixing them
its working
△ ▽ • Reply • Share ›

Konrad Makowski • a year ago


This is not working on Xenial Xerus because there is no packages for Ubuntu 16.04 in Phusion Passenger repositores yet.
2△ ▽ • Reply • Share ›

Chris Oliver Mod > Konrad Makowski • a year ago

You can try using the older trusty repository for now while they work up on updating their apt repository:

sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main > /etc/apt/sources.list.d/passenger.list'


1△ ▽ • Reply • Share ›

Konrad Makowski > Chris Oliver • a year ago


nginx-extras require perlapi-5.20.2, libperl5.20 (>= 5.20.2), passenger (< 5.0.28) wich will not be installed
1△ ▽ • Reply • Share ›

Jakub Syty > Konrad Makowski • a year ago


Yep, i got the same problem here
1△ ▽ • Reply • Share ›

Chris Oliver Mod > Jakub Syty • a year ago

You guys can remove that passenger repository and install the version directly from Ubuntu. Should be good enough for
now, and then once Phusion updates their repo, you can switch back to it so you can continue to get updates.
http://packages.ubuntu.com/...§ion=all
△ ▽ • Reply • Share ›

Konrad Makowski > Chris Oliver • a year ago


We can't, because nginx from Ubuntus repositories does not have built-in passenger support.
1△ ▽ • Reply • Share ›

gamer > Konrad Makowski • a year ago


any solution for this issue?
1△ ▽ • Reply • Share ›

Jakub Syty > gamer • a year ago


Unfortunetely no solution so far. I'm waiting too ;/
△ ▽ • Reply • Share ›

Chris Oliver Mod > Jakub Syty • a year ago

Unfortunately they haven't released a package for xenial yet. It's on their todo list, but they said by June at the latest. That's
a long time from now.

Here's how you can install it manually: https://www.phusionpassenge...


1△ ▽ • Reply • Share ›

Jakub Syty > Chris Oliver • a year ago


Thanks, it's working for me now! :)
△ ▽ • Reply • Share ›

Alex Hendershott > Jakub Syty • 7 months ago


Do you remember what you did here? Having trouble getting past this.
△ ▽ • Reply • Share ›

Jakub Syty > Alex Hendershott • 7 months ago


Exactly by the instructions in tutorial
△ ▽ • Reply • Share ›
https://gorails.com/deploy/ubuntu/16.04 9/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails

Leandro • a month ago


Error 403

The passenger_ruby and passenger_root are configured conrrectly. :/

[EDIT] Seem that my passenger is not running correctly. Can anybody help me?
1△ ▽ • Reply • Share ›

rovitulli > Leandro • 2 days ago


Have you ever find what is the cause of the 403?
△ ▽ • Reply • Share ›

Leandro > rovitulli • 21 hours ago


Unfortunately, no. I'm using puma now.
△ ▽ • Reply • Share ›

Jorg Dominguez • 7 months ago


Hi there!

I have a issue here: No Rakefile found (looking for: capfile, Capfile, capfile.rb, Capfile.rb, /usr/lib/ruby/vendor_ruby/Capfile)

What should I do?


1△ ▽ • Reply • Share ›

rajesh sah > Jorg Dominguez • 4 months ago


You should run it in local
△ ▽ • Reply • Share ›

Michel mody • a year ago


Hi Chris, when I do sudo service nginx restart it doesn't show anything, you say that this might be an error, I did sudo tail /var/log/nginx/error.log
but I can't see any error there! this is the output :

[ 2016-07-09 12:46:04.5741 23679/7f3c412f4700 Ser/Server.h:464 ]: [UstRouter] Shutdown finished


[ 2016-07-09 12:46:04.5743 23679/7f3c47f47780 age/Ust/UstRouterMain.cpp:523 ]: Passenger UstRouter shutdown finished
[ 2016-07-09 12:46:04.5939 23674/7f3bb0d6f780 age/Cor/CoreMain.cpp:967 ]: Passenger core shutdown finished
2016/07/09 12:46:05 [info] 23783#23783: Using 32768KiB of shared memory for push module in /etc/nginx/nginx.conf:75
[ 2016-07-09 12:46:05.7251 23790/7f341ddf1780 age/Wat/WatchdogMain.cpp:1291 ]: Starting Passenger watchdog...
[ 2016-07-09 12:46:05.7624 23793/7fdc2184b780 age/Cor/CoreMain.cpp:982 ]: Starting Passenger core...
[ 2016-07-09 12:46:05.7625 23793/7fdc2184b780 age/Cor/CoreMain.cpp:235 ]: Passenger core running in multi-application mode.
[ 2016-07-09 12:46:05.7646 23793/7fdc2184b780 age/Cor/CoreMain.cpp:732 ]: Passenger core online, PID 23793
[ 2016-07-09 12:46:05.8046 23798/7f724a019780 age/Ust/UstRouterMain.cpp:529 ]: Starting Passenger UstRouter...
[ 2016-07-09 12:46:05.8060 23798/7f724a019780 age/Ust/UstRouterMain.cpp:342 ]: Passenger UstRouter online, PID 23798

by the way when I opened /etc/nginx/nginx.conf the first time, I haven't find the lines passenger_ruby and passenger_root
1△ ▽ • Reply • Share ›

Dylan Huang > Michel mody • a year ago


Hi! I had that same problem and the solution for me was to comment out this line in my /config/environments/production.rb file:

"config.force_ssl = true"

What was happening was that each time you connected, the rails application forced you to redirect to "https" for SSL but your SSL cert is
not setup yet!
△ ▽ • Reply • Share ›

ChaosPredictor > Michel mody • a year ago


Hi, have the same issue can't find solution in any web.
Did you found something?
△ ▽ • Reply • Share ›

Raymond • 6 days ago


I ran into an issue installing this on nginx using rbenv. If you try to cap production deploy and get an error with passenger. Try opening
/etc/nginx/passenger.conf and add this to the file.

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;

to get your specific passenger root type

passenger-config --root
△ ▽ • Reply • Share ›

https://gorails.com/deploy/ubuntu/16.04 10/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails

aust1nz • a month ago


Chris,

Incredibly useful tutorial! For a small bit of extra config and command line hacking, I get to deploy my app to a server I control rather than an
option like Heroku. Thanks for putting this together!
△ ▽ • Reply • Share ›

Sahidur Rahman Suman • a month ago


Chris this tutorial is very helpful.
Can i deploy Worpress and Rails both in a server. Like - WordPress for blogging - ( http://blog.URL ) and rails application is deployed to -
(http://URL).
Please help me.
△ ▽ • Reply • Share ›

Tom K • 2 months ago


After getting through the process, when I tried to deploy my project, I kept getting: "Your Ruby version is 2.3.1, but your Gemfile specified 2.4.1"

Logged into the server as deploy, ruby version was 2.4.1. After a lot of troubleshooting, I su'd into root, and found that root had ruby 2.3.1 as it's
version.

I figured i must have screwed something up, so I started fresh.... this time watching the output of each command closely.

It seems that the Passenger install (as deploy user) imported ruby 2.3.1... 2.4.1 was already set up under deploy... and this 2.3.1 did not seem to
change anything for deploy. However, root, which had no ruby prior to passenger, was now set to 2.3.1.

I've updated root's ruby to be 2.4.1 using the rbenv method as root so that I could get something deployed to practice on... but...

I'm confused as to how and why 2.3.1 got there, and why it's interfering with the deploy command when i try to push an update...
△ ▽ • Reply • Share ›

LykourgosTs • 2 months ago


I'm planning to do a fresh OS installation on my local machine, so I have a question: is there a way to backup my existing ssh keys that I use to
login to the server or my repos, or do I have to generate and add a new key in this case? if thats the case I guess all I need to do is to generate
the new key on my fresh install and ssh-copy-id to the server again??
△ ▽ • Reply • Share ›

Chris Oliver Mod > LykourgosTs • 2 months ago

Meant to reply sooner, but all your ssh keys are located in ~/.ssh so you can backup that folder and just replace it on your new install to
use the same keys.
△ ▽ • Reply • Share ›

Nicoara • 3 months ago


i have the following error in the tutorial:

nicoara@ubuntu:~/deploy_test$ cap install STAGES=production


/home/nicoara/.rbenv/versions/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2112:in `raise_if_conflicts': Unable to activate capistrano-rails-1.2.3,
because capistrano-2.15.9 conflicts with capistrano (~> 3.1) (Gem::ConflictError)
from /home/nicoara/.rbenv/versions/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:1280:in `activate'
from /home/nicoara/.rbenv/versions/2.2.3/lib/ruby/2.2.0/rubygems.rb:198:in `rescue in try_activate'
from /home/nicoara/.rbenv/versions/2.2.3/lib/ruby/2.2.0/rubygems.rb:195:in `try_activate'
...

my gemfile has:
group :development do
gem 'capistrano', '~> 3.7', '>= 3.7.1'
gem 'capistrano-rails', '~> 1.2'
gem 'capistrano-passenger', '~> 0.2.0'
gem 'capistrano-rbenv', '~> 2.1'

my capfile has:
# Capfile
see more

△ ▽ • Reply • Share ›

Avatar This comment was deleted.

LykourgosTs > Guest • 3 months ago


Hi,

you can create the database.yml same way as you did with secrets.yml. Create an empty file in same place where secrets.yml are and
https://gorails.com/deploy/ubuntu/16.04 11/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails
you can create the database.yml same way as you did with secrets.yml. Create an empty file in same place where secrets.yml are and
then copy the code from your local copy (ie development env). You have to set the credentials accordning to the ones you have set on
production obviously :-)

To create the files (assuming you are connected on server) cd into your shared/config/ folder and then type touch database.yml and touch
secrets.yml
△ ▽ • Reply • Share ›

Erendira • 4 months ago


Thanks for the tutorial Chris!!

I'm just having an issue when trying to set the branch for the repo, it always took master and I'm using the set branch but nothing happens
△ ▽ • Reply • Share ›

Chris Oliver Mod > Erendira • 4 months ago

Hey @Erendira! I'm not sure how you've got it setup, but if you set the branch in your Capistrano config, that should do the trick. You can
either do it in config/deploy.rb globally (it defaults to master) or inside each of the stages like config/deploy/production.rb. It's usually just
set :branch, "mybranch"

All the other config options are listed here: http://capistranorb.com/doc...


△ ▽ • Reply • Share ›

Erendira > Chris Oliver • 4 months ago


That's the way I'm doing it, in the config/deploy.rb but when I run cap production deploy, it gets the HEAD last commit on master

deploy.rb:

# ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp } -- try this and ask for the branch, I typed develop, but neither
worked
set :branch, 'develop'

0:02 git:check
01 git ls-remote git@bitbucket.org:altocustos/custos_api.git HEAD
01 a64ca2f22cfaeee296f994b1475d422b179ec94a -- this is the only commit on master branch
01
01 HEAD
01
✔ 01 ubuntu@34.208.184.149 1.825s
△ ▽ • Reply • Share ›

Chris Oliver Mod > Erendira • 4 months ago

Yep your code looks right. I think that git ls-remote is fine because Capistrano actually clones your full repo to the server (all
the branches) and then when it does a "git archive branch | tar" command later to make the new release folder, it will grab
the branch there. I don't think this step is gonna be the problem, so it might actually be using the right branch.
△ ▽ • Reply • Share ›

Erendira > Chris Oliver • 4 months ago


Gosh!! found the problem, the app was in a folder inside the main dir, and that causes it couldn't find the gemfile and that's
why I was assuming that set branch didn't work.

Now I have another problem :( when it tries to precompile the assets it gives me an error, because mi app is a rails 5 api,
how can I disable the assets:precompile?
△ ▽ • Reply • Share ›

Chris Oliver Mod > Erendira • 4 months ago

Awesome! :)

I believe for that, you can either override the deploy:assets:precompile task with an empty task, or you can also possibly
remove the web role from the server line in config/deploy/production.rb. That may also disable some other things that run
on the web role, but I don't remember what those might be so it might be the best solution for an api-only app.
△ ▽ • Reply • Share ›

Erendira > Chris Oliver • 4 months ago


# config/deploy.rb
Rake::Task["deploy:assets:precompile"].clear_actions
Rake::Task["deploy:assets:backup_manifest"].clear_actions

Did the trick, thanks so much for the help :)


△ ▽ • Reply • Share ›

Aziz NIANG • 4 months ago


Hello Chris
https://gorails.com/deploy/ubuntu/16.04 12/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails
Hello Chris

I fixed the issue I initally posted about lol. But now when I visit the URL there's no site to visit, it says unable to connect

-----
Great tutorial say I'm trying to deploy a rails 5 app with ubuntu 16.04 etc... On cap production deploy I get the following error on deploy:migrate

INFO [deploy:migrate] Run `rake db:migrate`


DEBUG [15816e11] Running if test ! -d /home/deploy/app/releases/20170313091718; then echo "Directory does not exist
'/home/deploy/app/releases/20170313091718'" 1>&2; false; fi as deploy@138.68.83.124
DEBUG [15816e11] Command: if test ! -d /home/deploy/app/releases/20170313091718; then echo "Directory does not exist
'/home/deploy/app/releases/20170313091718'" 1>&2; false; fi
DEBUG [15816e11] Finished in 0.306 seconds with exit status 0 (successful).
INFO [64a72276] Running ~/.rvm/bin/rvm default do bundle exec rake db:migrate as deploy@138.68.83.124
DEBUG [64a72276] Command: cd /home/deploy/app/releases/20170313091718 && ( export RAILS_ENV="production" ; ~/.rvm/bin/rvm default
do bundle exec rake db:migrate )
DEBUG [64a72276] rake aborted!
DEBUG [64a72276] PG::ConnectionBad: could not connect to server: Connection refused
Is the server running on host "138.68.83.124" and accepting
see more

△ ▽ • Reply • Share ›

Gustavo Pergola > Aziz NIANG • 4 months ago


Hi Aziz, could you fix it? I'm running into the same problem =/
△ ▽ • Reply • Share ›

Aziz NIANG > Gustavo Pergola • 4 months ago


Hey! No not yet, does your passenger:restart say there is no "Passenger served application"?
△ ▽ • Reply • Share ›

Gustavo Pergola > Aziz NIANG • 4 months ago


I solved the issue by configuring my postgreSQL to accept TCP/IP connections from my server. Check
/etc/postgresql/9.5/main for postgresql.conf and pg_hba.conf for configurantions about this.
△ ▽ • Reply • Share ›

Aziz NIANG > Gustavo Pergola • 4 months ago


Thanks for the tip! I must have a different problem because it's still bugging will figure sth out +1
△ ▽ • Reply • Share ›

Mohsen Sadeghbeigi • 5 months ago


Hi Chris,
How I can set domain name to my server ip address to input my site domain instead of writing ip address?

Thanks
△ ▽ • Reply • Share ›

Gustavo Pergola > Mohsen Sadeghbeigi • 3 months ago


Make sure you added yout domain name in /etc/nginx/sites-enabled/default.
After that, for digital ocean, follow these steps: https://www.digitalocean.co....

Hope it helps ;)

Edit: Don't forget to set up DO namespaces at your domain registrar panel. (tutorial link: https://www.digitalocean.co...
△ ▽ • Reply • Share ›

Load more comments

✉ Subscribe d Add Disqus to your siteAdd DisqusAdd 🔒 Privacy

https://gorails.com/deploy/ubuntu/16.04 13/14
7/26/2017 Deploy Ruby On Rails on Ubuntu 16.04 Xenial Xerus - GoRails

(/)
© 2014-2017, Chris Oliver. (http://excid3.com)
LEARN EXTRAS ABOUT
Series (/series) Deploy Rails (https://hatch.gorails.com) Feedback
Episodes (/episodes) Pricing (/pricing) (http://gorails.uservoice.com/forums/259979-
Community (/forum) Testimonials (/testimonials) general)
Guides (/guides) Blog (/blog) Terms (/terms)
Courses (https://courses.gorails.com/) Privacy (/privacy)
About Us (/about)
Icons by Icons8 (https://icons8.com)

Join the newsletter Follow @excid3 (https://twitter.com/excid3) Tweet (https://twitter.com/share)

https://gorails.com/deploy/ubuntu/16.04 14/14

Вам также может понравиться