DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Because the DevOps movement has redefined engineering responsibilities, SREs now have to become stewards of observability strategy.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Related

  • Cookies Revisited: A Networking Solution for Third-Party Cookies
  • Using Event-Driven Ansible to Monitor Your Web Application
  • The Blue Elephant in the Room: Why PHP Should Not Be Ignored Now or Ever
  • Azure Deployment Using FileZilla

Trending

  • Enforcing Architecture With ArchUnit in Java
  • MCP Servers: The Technical Debt That Is Coming
  • Event Driven Architecture (EDA) - Optimizer or Complicator
  • GitHub Copilot's New AI Coding Agent Saves Developers Time – And Requires Their Oversight

Web Application Deployment Using Webistrano and Capistrano

By 
Kasia Gogolek user avatar
Kasia Gogolek
·
Nov. 26, 12 · Interview
Likes (0)
Comment
Save
Tweet
Share
19.5K Views

Join the DZone community and get the full member experience.

Join For Free

One of the 12 steps to better code, according to Joel Spolsky’s blog is one-click deployment. I’ve worked in places where the deployment process contained about 20 steps and involved a lot of copy-pasting of the paths and environment variables. It was obviously prone to errors, and very stressful for the developers involved. God forbid your wiki database crashed, and you lost all the steps!

One click deployment means faster, less buggy deployment. No more wondering, which environment you’re in at the moment, and if you just run that migration script on staging or production. You can even ask your Jimmy to deploy the lovely application for you.

There are quite a few tools that can help you deploy your applications:

  • Ant/Phing
  • Bash scripts
  • Jenkins
  • Aegir

Today, however I will focus on the mix of Capistrano / Webistrano.

Both of the packages are ruby on rails based, and can be easily installed using gems.

Capistrano is an open source tool that allows to run scripts on multiple servers. Capistrano automates the process of making new versions of an application as well as supporting tasks such as updating databases, rsyncing media assets etc.

Webistrano is a RoR open source UI for managing Capistrano deployments. It provides a descriptive interface for your projects and stages, and easy way to add environment specific settings.

Installation

Installing Capistrano is quick and easy as long as you have gems and ruby installed:

$ gem install capistrano

With capistrano installed, let’s move on with Webistrano installation. I want my install to be visible externally on http://webistrano.server.com. For this, I’m going to use Phusion Passanger. For now I’m going to install Webistrano straight in my httpdocs

$ cd /var/www/vhosts/webistrano.server.com/httpdocs
git clone git://github.com/peritor/webistrano.git .

Webistrano uses mysql to store the information about your project, stages and deployments, so let’s log in and set it up:

$ mysql
mysql> CREATE DATABASE `webistrano`;
mysql> CREATE USER 'webistrano'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON `webistrano`.* TO 'webistrano'@'localhost' WITH GRANT OPTION;

Now we need to configure it before we build it with rake. Two files that we need to copy: database (database.yml), and general, webistrano config file (webistrano_config.rb).

$ cp config/webistrano_config.rb.sample config/webistrano_config.rb
cp config/database.yml.sample config/database.yml

Now edit the file with your mysql details and other options you want to set.

And the last, but not least, before we start the build. Webistrano creates all the stylesheets on the first run, so the public folder has to have writeable permissions:

$ chmod -R 755 public

That’s it for the basic set up. What’s left is building webistrano. We’re going to need bundler to install it. If you don’t have bundler yet, use gem to install it:

$ gem install bundler

Now run rake to build webistrano:

$ RAILS_ENV=production rake db:migrate

If like me, you get the following error bundler (~> 1.0.10) ruby, otherwise move to the next step (bundle install)

rake aborted!
Bundler could not find compatible versions for gem "bundler":
In Gemfile:
bundler (~> 1.0.10) ruby
Current Bundler version:
bundler (1.2.1)[/code]

You will have to install an older version of the bundler. Gems allows you to keep different versions of the same package so this won't clash with your other ruby applications:

$ gem install bundler --version=1.0.10

If this was successful, or you haven't had any issues with your bundler, simply run bundle install

$ bundle install
Fetching source index for http://rubygems.org/
Installing rake (0.9.2.2)
Installing activesupport (2.3.11)
Installing rack (1.1.3)
Installing actionpack (2.3.11)
Installing actionmailer (2.3.11)
Installing activerecord (2.3.11)
Installing activeresource (2.3.11)
Using bundler (1.0.10)
Installing highline (1.6.15)
Installing jruby-pageant (1.1.1)
Installing net-ssh (2.6.0)
Installing net-scp (1.0.4)
Installing net-sftp (2.0.5)
Installing net-ssh-gateway (1.1.0)
Installing capistrano (2.6.0)
Installing erubis (2.7.0)
Installing exception_notification (2.3.3.0)
Installing mocha (0.9.8)
Installing mysql (2.8.1) with native extensions
Installing open4 (0.9.3)
Installing rails (2.3.11)
Installing syntax (1.0.0)
Your bundle is complete! It was installed into ./vendor/bundler

You need to build with rake again

$ RAILS_ENV=production rake db:migrate
WARNING: 'require 'rake/rdoctask'' is deprecated. Please use 'require 'rdoc/task' (in RDoc 2.4.2+)' instead.
at /var/www/vhosts/webistrano.server.com/httpdocs/vendor/bundler/ruby/1.8/gems/rake-0.9.2.2/lib/rake/rdoctask.rb
rake aborted!
no such file to load -- /var/www/vhosts/webistrano.server.com/httpdocs/config/webistrano_config
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

If you get this error find out what rake gems you've got installed by running gem list

$ gem list
=> rake

You'll have to specify the version of rake manually in your gem file:

$ vim Gemfile
gem rake, '0.8.7'

You will have to run bundle install again. We'll start from unlocking the version of rake that bundle currently has set to use, by updating bundle:

$ bundle update rake

Now install the correct bundle

$ bundle install

and run rake using bundle exec

$ bundle exec rake db:migrate --trace RAILS_ENV=production

Hurrah! You have successfully installed Webistrano!

Running Webistrano

** EDIT **

IN my original post I've been advising to use Phusion Passenger for Apache to run websitrano, but since it occurred it only causes trouble with permissions during deployment. Phusion Passenger should run as the user that has the ownership over conf/environment.rb which in my case was webistrano. All seemed ok, and logging the id of my user running Webistrano was pointing to the correct one, but it seems that there was some sort of conflict and the process was actually running as nobody. You can find more about the issue on stack overflow

With this in mind, I would recommend using mongrel instead.

$ sudo gem install mongrel
$ su - webistrano
$ cd /var/www/vhosts/webistrano.server.com/httpdocs
$ mongrel_rails start -e production -d -p 3000

Now go to http://webistrano.server.com:3000 and you should be able to see the login screen

login: admin 
password: admin

Success! You can now see the main Webistrano screen.

If this has wet your apetite, please read my next post about deploying PHP applications with Webistrano. Also, feel free to leave your comments below. I hope you found this post useful.




Web application Capistrano (software)

Published at DZone with permission of Kasia Gogolek, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Cookies Revisited: A Networking Solution for Third-Party Cookies
  • Using Event-Driven Ansible to Monitor Your Web Application
  • The Blue Elephant in the Room: Why PHP Should Not Be Ignored Now or Ever
  • Azure Deployment Using FileZilla

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!