June 9th, 2016
rvm autolibs disable
gem install hanami
/home/username/sub.domain.tld. Where sub=your subdomain (if any), domain=your domain, tld=your top level domain (probably .com)
publicif you use
dispatch.fcgibelow.
<IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi </IfModule> <IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi </IfModule> Options +FollowSymLinks +ExecCGI <Files *.fcgi> Header set Content-type "text/html" </Files> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L] ErrorDocument 500 "Rack application failed to start properly!"
#!/home/username/.rvm/rubies/ruby-2.2.4/bin/ruby # ^change^^ ^^change^^^ # The above ruby MUST match the gems you try to load. GEM_HOME and GEM_PATH must match. VERSION="ruby-#{RUBY_VERSION}" # Must be gems for the ruby version specified on first line. ENV['GEM_HOME'] = File.expand_path("/home/blazerw/.rvm/gems/#{VERSION}") ENV['GEM_PATH'] = File.expand_path("/home/blazerw/.rvm/gems/#{VERSION}") + ":" + File.expand_path("/home/blazerw/.rvm/gems/#{VERSION}") # Basic environment ENV['RACK_ENV'] ||= 'production' ENV['HANAMI_ENV'] ||= 'production' ENV['RAILS_ENV'] ||= ENV['RACK_ENV'] ENV['HOME'] ||= `echo ~`.strip # Setup logging, that helps a ton fastcgi_log = File.open("fastcgi.log", "a") STDOUT.reopen fastcgi_log STDERR.reopen fastcgi_log STDOUT.sync = true STDOUT.print "Application Startup:\n" STDOUT.print "RACK_ENV : #{ENV['RACK_ENV']}\n" STDOUT.print "RAILS_ENV : #{ENV['RAILS_ENV']}\n" STDOUT.print "HANAMI_ENV: #{ENV['HANAMI_ENV']}\n" STDOUT.print "Rest of ENV\n" STDOUT.print "#{ENV.inspect}\n" require "fcgi" require File.join(File.dirname(__FILE__), 'config/environment.rb') # Good debugger, but only works once your ruby version matches your fcgi gem. #FCGI.each {|request| # out = request.out # out.print "Content-Type: text/plain\r\n" # out.print "\r\n" # out.print Time.now.to_s # out.print "\r\n" # out.print "ENV:\r\n#{ENV.inspect}" # out.print "\r\n" # out.print "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL} #{RUBY_PLATFORM} #{RUBY_RELEASE_DATE}" # out.print "\r\n" # out.print "Main" # request.finish #} # Class that translates FCGI requests for your ruby app. class Rack::PathInfoRewriter def initialize(app) @app = app STDOUT.print "app:#{@app.inspect}\n" # Following two lines can't be used when starting the Hanami::Controller STDOUT.print "app name:#{@app.name}\n" STDOUT.print "app config:#{@app.configuration.inspect}\n" @app end def call(env) env.delete('SCRIPT_NAME') #SCRIPT_NAME can't be nil if you want the Hanami::Container to be the app we start. #env['SCRIPT_NAME'] = "" parts = env['REQUEST_URI'].split('?') env['PATH_INFO'] = parts[0] env['QUERY_STRING'] = parts[1].to_s STDOUT.print "env:#{env.inspect}\n" STDOUT.print "input:#{env['rack.input'].inspect}\n" @app.call(env) end end wrappedApp = Rack::Builder.new do use Rack::ShowExceptions use Rack::PathInfoRewriter # Using Hanami::Container causes stack too deep on each request. Not sure why, didn't investigate. #run Hanami::Container.new # None of the examples had that last ".new", but only an instance of Web::Application has the ".call" method used in Rack::PathInfoRewriter above's last line. run Web::Application.new end Rack::Handler::FastCGI.run wrappedApp