Skip to main content

Deploy Ubuntu 16.04 Xenial Xerus Discussion

General • Asked by Chris Oliver

This is not working on Xenial Xerus because there is no packages for Ubuntu 16.04 in Phusion Passenger repositores yet.

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'

nginx-extras require perlapi-5.20.2, libperl5.20 (>= 5.20.2), passenger (< 5.0.28) wich will not be installed

Yep, i got the same problem here

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

We can't, because nginx from Ubuntus repositories does not have built-in passenger support.

any solution for this issue?

Unfortunetely no solution so far. I'm waiting too ;/

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...

Thanks, it's working for me now! :)

Do you remember what you did here? Having trouble getting past this.

Exactly by the instructions in tutorial


After changing database.yml and secrets.yml to examples, whenever I run Rails s for running server. I get error and it complains that it can't find the yml files and server will not get started. What can I do?


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 )


Edit /etc/nginx/nginx.conf file and uncomment #include /etc/nginx/passenger.conf;
For example, you may see this:
include /etc/nginx/passenger.conf;
after this:
sudo service nginx restart

and final check if passeger work:
sudo /usr/bin/passenger-config validate-install

do you see the message "Restarting nginx nginx" when you type "sudo service nginx restart" ? In my case I don't see it and Chris said that something gonna be wrong if you don't see it.

I see [ OK ]

strange! I am using ubuntu 16.04 and every thing is working correctly but I didn't saw anything like [ok] or "restarting nginx ... [ok]" like Chris does! weird :/

I'm on 14.04 but I enter here because your other question:
"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 :"


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

Hi, have the same issue can't find solution in any web.
Did you found something?

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!


Chris, Thanks so much for this tutorial. I followed along and was able to get this all working on a VirtualBox setup. However a problem i encountered was a bundler error. i had to SSH into the server and use 'which bundler' and add that path into the :default_env in deploy.rb
FOR THOSE WITH THIS ERROR:
set :default_env, { path: "/home/deploy/.rbenv/shims:~/.rbenv/bin:$PATH" }

My question after this...Is there an easy way to run custom rake tasks, once deployed?

Thanks


After following this tutorial, I'm still getting the default "Welcome to nginx" page

You'll need to restart nginx again to get the site up and running.


The Capistrano part of this tutorial is quite out of date. See http://stackoverflow.com/a/...

I'd be happy to help rewrite that part if needed.


Thanks for this very helpful tutorial, everything works as expected, except for my assets... some of my images aren't showing up in the browser, but they get deployed... I´m not sure what to do... I've been googling around and don´t seem to find a solution

Make sure you're using these helpers for your static assets: http://api.rubyonrails.org/...

Thanks it worked :)

great tutorial btw!!


After installing NGinx it is necessary to set up and activate the firewall - otherwise you won't see even the Nginx start page. See https://www.digitalocean.co...


When I use rbenv and launch "cap production deploy" I get an error: "LoadError: cannot load such file -- capistrano/rbenv". On the local computer I use RVM and I want to set up rbenv on the remote one. Perhaps it is not possible? Do I have to have rbenv on the local computer installed?


Cristian Georgescu

Newbie question here. I followed the tutorial and I have the rails 5 app on server.
I bundle install everything but when trying to start rails (rails s -e production) I get the rails new prompt ....like I need to create a new rails app. Any tips on how to start it or what I might be missing ?

You don't need to run Rails, Passenger will start the app for you automatically, that's why we set it up this way so you don't have to manage running scripts. It's automatic.


I had to Generate RSA SSH Keys to make things work. The command is "ssh-keygen". See http://www.cyberciti.biz/fa...


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?

You should run it in local


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 [email protected]: 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.

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

what is the server_name? ICan have any domain? Thanks

yes I had the same issue, any solutions?

Getting the same issue -- anyone solve?

I had the same issue , anyone knows please


Almost there but when I run `cap production deploy` I get

```
00:00 rbenv:validate
rbenv: 2.3.1 is not installed or not found in $HOME/deploy/.rbenv/versions/2.3.1

```

Is cap checking this on my local machine or the server? I have changed the path to just `$HOME/.rbenv` and still get the same issue.


Also getting an error `There are no Phusion Passenger-served applications running whose paths begin with '/home/deploy/app_name'`. app_name is replaced with the name of my app.

Seems there is another user getting this problem as well.
http://stackoverflow.com/qu...

hey Jay, did you end up solving this issue?


Thanks Chris for this video! How do we setup password authentication, if we're using this tutorial to deploy a staging version of the site? I've setup everything via this site https://www.digitalocean.co... and yet it's not asking for passwords upon entering the site.

Hmmm, double check that you restarted nginx and that went correctly. If so, it should pick that up.


Maybe I missed it in the tutorial, but I had to authenticate the DigitalOcean server with GitHub (by creating a SSH key from the server). Capistrano deployment failed until I did that, as the server was denied access to the Git repository.


I get a 'Permission denied (publickey) fatal: could not read from remote repo' when I 'cap production deploy'. The same keys are on DigitalOcean and Github. Pushes to github works fine. I can ssh into the digitalocean server as root or deploy users fine too. Anyone know what I've missed?

I'm getting the same prob. Did you find a fix?
Fixed by running 'ssh-add' on local machine.

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

Thanks

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...

Just to confirm, firstly the domain need to buy in godaddy or some similar, correct? I don't think you can do this with Digital Ocean

Yes, correct. You should look for any domain registrar. Some are:
GoDaddy
HostGator
Namecheap
1&1
Name.com
Network Solutions
eNom
Gandi
Register.com
A Small Orange
iwantmyname
Google Domains beta


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 [email protected]
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 [email protected]
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
TCP/IP connections on port 5432?
DEBUG [64a72276] /home/deploy/app/shared/bundle/ruby/2.4.0/gems/activerecord-5.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:671:in `initialize'

Do you have any pointers? to make it work can't seem to find similar issue on deployment server

note i tried this it didn't work: https://www.digitalocean.co...

Thanks

Hi Aziz, could you fix it? I'm running into the same problem =/

Hey! No not yet, does your passenger:restart say there is no "Passenger served application"?

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.

Thanks for the tip! I must have a different problem because it's still bugging will figure sth out +1


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

Hey @disqus_FdxDeiCXJb:disqus! 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...

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 [email protected]:altocustos/custos_api.git HEAD
01 a64ca2f22cfaeee296f994b1475d422b179ec94a -- this is the only commit on master branch
01
01 HEAD
01
✔ 01 [email protected] 1.825s

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.

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?

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.

# 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 :)


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 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


i have the following error in the tutorial:

[email protected]:~/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
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'

# Load DSL and set up stages
require "capistrano/setup"

# Include default deployment tasks
require "capistrano/deploy"

what to do?

Thanks


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??

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.


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...


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.


Error 403

The passenger_ruby and passenger_root are configured conrrectly. :/

[EDIT] Seem that my passenger is not running correctly. Can anybody help me?

Have you ever find what is the cause of the 403?

Unfortunately, no. I'm using puma now.


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!


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


Lovely tutorial... how do you launch the rails console to make a few changes to the application...?


Thank you for this guide! One question I have is how do I load the ruby app if I am not able to use git? When I run cap production deploy it fails trying to read from remote repository because it is calling git and I am not using git. I am new to all of this so sorry for my ignorance.

INFO [01ba63f0] Running /usr/bin/env git ls-remote HEAD as [email protected]

DEBUG [01ba63f0] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.4.1" GIT_ASKPASS="/bin/echo" GIT_SSH="/tmp/git-ssh-orderentry-producti..." ; /usr/bin/env git ls-remote HEAD )

DEBUG [01ba63f0] fatal: 'HEAD' does not appear to be a git repository

DEBUG [01ba63f0] fatal: Could not read from remote repository.


Diego Polido Santana

Thanks a lot for this post! Simply I use it every new project I have since long time ago. Perfect stack and everything works fine following the instructions.


Could someone help me , iv'e been at this for a week now i get this error when i do a cap production deploy
rbenv: bundle: command not found
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: bundle exit status: 127
bundle stdout: Nothing written
bundle stderr: rbenv: bundle: command not found

SSHKit::Command::Failed: bundle exit status: 127
bundle stdout: Nothing written
bundle stderr: rbenv: bundle: command not found

Tasks: TOP => deploy:updated => bundler:install
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing as [email protected]: bundle exit status: 127
bundle stdout: Nothing written
bundle stderr: rbenv: bundle: command not found


Thank you very much for the tutorial. But..I have a problem (ruby 2.4.2, rails 5.1.4). When i run "cap production deploy".
I'm having an error:
_______________________________________________________________________________________________
00:09 deploy:assets:backup_manifest
01 mkdir -p /home/user/app/releases/20170925040319/assets_manifest_backup
✔ 01 [email protected] 0.047s
WARN Rails assets manifest file not found.
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: Rails assets manifest file not found.

Capistrano::FileNotFound: Rails assets manifest file not found.

Tasks: TOP => deploy:assets:backup_manifest
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing as [email protected]: Rails assets manifest file not found.
_______________________________________________________________________________________________
Google did not help me. Can you help me? Thanks!


Hi Chris, thanks for brilliant tutorial. I followed it about an year ago and every thing worked smoothly. Until Today I saw that the production.log on the server side isn't updating. It seems to be stuck in 23/5 2017 :) and havn't updated since. So I was thinking, Is there maybe something in the production.rb setup or the sim-links that I could alter to get the production.log updated again? please see my question here about this problem: https://stackoverflow.com/q...


Any plan on updating this for a webpacker setup? ruby 2.4.2, rails 5.1.4?


Thanks for this great tutorial and My cap deploy went fine without any error and I removed the default nginx page. After I restarted the nginx again I can't see my rails app running. I got This Site can't be reached. Can you help me on this please?

I got Connection refused is the error.


404 Not Found


Hi Chris! I have managed to make it work. But give this setup, how could I make rails db:migrate:reset and rails db:seed to restore a backup?
Hey Juan, I would probably just SSH in and run those commands on the server in the app's current directory. You probably could run Capistrano tasks to do that, but SSH is probably easier.
That was the first approach I tried but using 'deploy' user I don't have enough privileges, and if I switch to 'postgres' user I can't run bundle exec. How do you do that? Thanks

I have use Vue.js and user *vue, the single file component.
so, how to deploy it?
Anyone know?


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.