Host Ruby igennem en IIS7

Published: 05. April 2010

Jeg har altid haft en lyst til at kigge mere på Ruby. Dog hvis jeg skal lave en hjemmeside i Ruby, så skal den jo kunne hostes på den infrastruktur som jeg alderede har - derfor skal den kunne køre igennem en windows maskine.

Ruby er et sejt sprog. Med IronRuby til .NET verdenen begynder det også at blive meget interesant for .NET Udviklere. Jeg har altid haft en lille lyst til at kunne kode en hjemmeside i Ruby, og måske også i Ruby on Rails.

Idag sadte jeg mig for at lave jordens simpleste hjemmeside, og så få den til at blive hostet på min windows server. Jeg valgte at bruge et framework der hedder Sinatra til ruby, som er utroligt ligetil:

get '/' do
   "Hello World!"
end

For at teste dette eksempel kan du lave denne fil, og gemme den som app.rb:

require 'rubygems'
require 'sinatra'
get '/hi' do
   "Hello World!"
end

Jeg valgte dette framework istedet for Ruby on Rails, da Rails er et stort framework, hvor tusinde af andre ting kan gå galt - plus at jeg gerne vil lære tingene fra bunden, hvor Rails bruger en masse ting i Ruby som jeg endnu ikke forstår endnu.

Så derfor var Sinatra et glimrende valg, da jeg kom helt ned til kernen, hvor selv jeg forstår hvad der foregår.

Først var planen at bruge IronRuby. Det gik skam også ganske glimrende, og jeg fik det hostet på IIS igennem IronRuby.Rack (det var ikke lige så brugervenligt at få til at virke, da der ikke var nogen release af det endnu), men det viste sig så, at der var en bug i IronRuby som gjorde at statiske filer ikke virkede (så mit stylesheet ville ikke loade)

Trist... Det kunne dog løses, men det omhandlede at gå ind og ændre i Sinatras kerne, hvilket ikke er særligt pænt.

Selvom jeg fik det til at virke, så synes jeg ikke det var nemt / pænt nok, til at skrive en post om, så jeg valgte at bruge det rigtige Ruby istedet. IronRuby er rigtigt interesant, og jeg regner også med at jeg skal hoste på det engang, når det bliver mere modent.

Heldigvis var det ikke særligt svært at gå det til at virke med Ruby og en Mongrel server som backend.

Bemærk at denne walkthough regner med at du kender IIS7, og Windows rimeligt godt.

  1. Installer Ruby, husk at vælge Enable Ruby Gems til
  2. Åben cmd, og skriv gem install sinatra
  3. Skriv gem install mongrel
  4. Hent Url Rewrite 2.0 til IIS
  5. Hent Application Request Routing til IIS
  6. Da dette er en Sinatra application, så skal man bare skrive ruby app.rb for at starte serveren (den vil starte på port 4567, med mindre du har sat Sinatra anderledes op)
  7. Gå ind på http://localhost:4567/, for at se at det virker
  8. Vi skal nu ind i IIS og sætte en Rewrite sti op, så når man requester ruby.deldy.dk, så laver vi en request til localhost:4567. Gå ind i IIS, lav et nyt website, og sæt en binding op til det domaine det skal peje på. Jeg har jo så valgt ruby.deldy.dk. Bemærk at den fysiske sti, IKKE skal være din applikations sti, men bare en tom mappe et sted.
  9. Vælg Url Rewrite, højreklik på Indbound rules og sig Add Rule, vælg Reverse Proxy og tryk OK.
  10. Skriv localhost:4567 i server name, og tryk OK
  11. Naviger til ruby.deldy.dk, eller rettere det domaine du valgte, og se at det hele virker.
  12. Vi skal nu starte vores app, hver gang vores server starter. Mongrel understøtter at den installeres som en Windows Service, men kun hvis man bruger Rails. Da vi ikke burger rails, må vi gøre dette på en anden måde. Jeg har valgt at lave en Task i Task Scheduler, som kalder en .bat fil, hver gang serveren starter. Denne bat fil ligger i min applikations rod og siger ganske simpelt: ruby app.rb

Det var det hele. Det kan virke lidt voldsomt, men langt det meste af dette handler om at installere diverse tools.

Denne fremgangsmåde vil sandsynligvis også virke for Ruby on Rails, og andre ruby web frameworks, dog skal det ruby som skal til for at starte serveren, være anderledes.

Bemærk at dette er en simpel gennemgang, og jeg kan have misset meget vigtige ting som sikkerhed, og gud ved ikke hvad :)

Du kan se min lille side køre på ruby.deldy.dk, samt hente min kode her: MyRubySite.zip

Comments

  • Hans Ole Andersen wrote at 23. April:

    Rails ejer verden.. Rails 3 ejer endnu mere ;)

Write a comment


You can use Markdown formatting