Skip to content

Instantly share code, notes, and snippets.

@remino
Forked from MicahChalmer/.htaccess
Created November 17, 2015 03:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save remino/90e810f2337a0c774c29 to your computer and use it in GitHub Desktop.
Save remino/90e810f2337a0c774c29 to your computer and use it in GitHub Desktop.
Scripts to set up Ruby 1.9.3 on a DreamHost shared hosting account via rbenv and ruby-build, and run a Rack app with it via FastCGI.
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
</IfModule>
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
</IfModule>
Options +FollowSymLinks +ExecCGI
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L]
#!/bin/bash
this_dir=`dirname $0`
unset GEM_HOME
unset GEM_PATH
export PATH=~/.rbenv/bin:"$PATH"
eval "$(~/.rbenv/bin/rbenv init -)"
err_log_file="${this_dir}/log/dispatch_err.log"
exec ~/.rbenv/shims/ruby "${this_dir}/dispatch_fcgi.rb" "$@" 2>>"${err_log_file}"
require 'rubygems'
require 'bundler'
Bundler.setup(:default, :fcgi)
require 'rack'
class Rack::PathInfoRewriter
def initialize(app)
@app = app
end
def call(env)
env['SCRIPT_NAME'] = '' # Don't delete it--Rack::URLMap assumes it is not nil
pathInfo, query = env['REQUEST_URI'].split('?', 2)
env['PATH_INFO'] = pathInfo
env['QUERY_STRING'] = query
@app.call(env)
end
end
app, options = Rack::Builder.parse_file('config.ru')
wrappedApp = Rack::Builder.new do
use Rack::ShowExceptions
use Rack::PathInfoRewriter
run app
end
Rack::Handler::FastCGI.run wrappedApp
# Initial setup for Ruby 1.9.3 on DreamHost shared hosting.
# We assume you're already in your project's root directory, which should
# also be the directory configured as "web directory" for your domain
# in the DreamHost panel.
# Install rbenv and ruby-build
git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
# Create temporary directory--DreamHost does not allow files in /tmp to be
# executed, which makes the default not work
mkdir ~/.rbenv/BUILD_TEMP
# DreamHost will set your GEM_HOME and GEM_PATH for you, but this conflicts
# with rbenv, so we unset them here. You'll want to do this in your .bashrc
# on the dreamhost account.
unset GEM_HOME
unset GEM_PATH
# Add rbenv to PATH and let it set itself up.
# You probably want these two lines in your .bashrc as well:
export PATH=~/.rbenv/bin:"$PATH"
eval "$(~/.rbenv/bin/rbenv init -)"
# Decide which version of Ruby we're going to install and use.
NEW_RUBY_VERSION=1.9.3-p327
# Using that as the temp space, build and install ruby 1.9.3.
# The MAKE_OPTS=-j2 part is to limit make to 2 simultaneous jobs,
# so that DreamHost won't kill the build of ruby.
TMPDIR=~/.rbenv/BUILD_TEMP MAKE_OPTS=-j2 rbenv install $NEW_RUBY_VERSION
# Now everything is set up properly, you should be able to set your
# directory to use the new ruby:
rbenv local $NEW_RUBY_VERSION
# Bundler isn't included with ruby, so install it first:
gem install bundler
# Make sure rbenv picks up the newly installed bundler:
rbenv rehash
# Then use it to install the rest of your gems:
bundle install
# Create the "log" dir in for the file containing the stderr of your dispatch.fcgi script:
mkdir -p log
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment