Requirements

  1. Ruby versions
  2. Bundler
  3. shelly-dependencies gem
  4. Rails 3.x and Rails 4.x support
  5. Rails 2.3.x support
  6. Rack-based apps

Ruby versions

Shelly Cloud supports the following Ruby versions:

You can select which version of Ruby your Cloud should use by providing a setting in the Cloudfile.

INFO Whenever a new patch level is released we update all virtual servers with the newest version as soon as possible.

Bundler

Bundler is a great application dependency manager.

Applications which run on Shelly Cloud are required to use bundler (version 1.0 or higher) for managing their dependencies. Both Gemfile and Gemfile.lock files should be checked into the git repository.

shelly-dependencies gem

shelly-dependencies is a gem which simplifies configuring application to meet shelly's requirements. It's recommended to use it, because it decreases number of steps needed to configure application. Although it's not mandatory.

What it does is:

  • Requires "thin" gem
  • Requires "rake" gem
  • Configures application to serve static assets
  • Configures application to compile assets on request
  • Configures application to cache static files

Rails 3.x and Rails 4.x support

When using shelly-dependencies gem steps are very simple.

  1. Add it to your Gemfile:
    gem "shelly-dependencies", :group => :production
  2. Gemfile.lock must be checked in to your git repository.

If you don't want to load the shelly-dependencies gem, you can configure your application manually, by following the next three steps. If you use the shelly-dependencies gem, you can skip them.

  1. Gemfile with following gems:
    gem "thin", :group => :production
  2. Static files. By default, Rails 3 does not serve static files. Shelly Cloud architecture requires that the application server handles all request, even to static files. To enable that, add this line to the config/environments/production.rb file:

    config.serve_static_assets = true

    Additionally static files can be fetched once and then served from Varnish (HTTP cache server) by adding the following line:

    config.static_cache_control = "public, max-age=31536000"

    See Caching on front-end for more details.

  3. Assets compilation. Rails does not compile assets by default, we need to enable compilation or precompile them. Below you can see two main approaches.

    Enable assets compilation on request ( config.assets.compile = true in config/environments/RAILS_ENV.rb). Assets will be compiled on first request to them and then, they will be cached on Shelly Cloud's front-ends. It's the preferred solution and it's also what shelly-dependencies gem does.

    You may want to precompile assets on deploy with deployment hook. The disadvantage of this solution is that it increases deployment time.

    # config/deploy/shelly/before_restart
    rake assets:precompile

    INFO More details on those two approaches can be found on Asset Pipeline documentation page.

Rails 2.3.x support

If you're running Rails 2.3.x application you have to meet the following requirements:

  1. config.ru must be present in your application, if you're missing one see the following guide on how to create it.
  2. Shelly Cloud requires that your application uses Bundler, and that Gemfile.lock is checked in to your git repository. To add bundler to your Rails 2.3 app, follow this guide.
  3. Gemfile with following gems:
    gem "thin", :group => :production
  4. Gemfile.lock checked in to your git repository.

Rack-based apps

In order to deploy rack-based application to Shelly Cloud, the application must meet the following requirements:

  1. Configuration file config.ru must be present. It's common that rack-based frameworks generate this file. If you don't have it in your app's root directory, check your frameworks documentation.
  2. Gemfile with following gems:
    source :rubygems
    gem "rack"
    gem "rake"
    gem "thin", :group => :production
  3. Gemfile.lock checked in to your git repository.
  4. File named Rakefile in your project's root directory with dummy db:migrate and db:setup tasks.
    namespace :db do
      task :migrate
      task :setup
    end
Talk to a human