Vra

So gewild soos Ruby en Rails is, lyk dit of hierdie probleem reeds opgelos sou wees.JRuby en mod_rails is almal fyn en deftig, maar hoekom is daar nie 'n Apache-mod vir net reguit Ruby nie?

Was dit nuttig?

Oplossing

Die basiese probleem is dit:vir 'n lang tyd was MRI die enigste haalbare Ruby-implementering.MRI het 'n aantal probleme wat dit moeilik maak om dit in 'n ander toepassing in te sluit (wat basies is wat mod_ruby doen:dit sluit MRI in Apache in), veral 'n multi-draad een (wat Apache is).Dit is nie besonder draad-veilig nie en dit het nogal 'n bietjie globale toestand.

Hierdie globale toestand beteken byvoorbeeld dat as een Rails-toepassing een of ander klas verander, dan alle ander Rails-toepassings wat op dieselfde Apache-bediener loop, sal ook sien hierdie gewysigde klas.

Nog 'n probleem is dat die MRI-bronkode nie maklik hackbaar is nie.MRI is nou meer as 15 jaar oud, en dit begin wys.

As gevolg van hierdie probleme het mod_ruby nog nooit regtig behoorlik gewerk, en op 'n stadium het die instandhouers eenvoudig opgegee.

Die C-gebaseerde PHP-tolk, aan die ander kant, is van dag een af ​​ontwerp om as mod_php binne Apache uitgevoer te word.Inderdaad, vir die eerste paar weergawes was daar nie eers 'n opdraglyn weergawe van die tolk nie, mod_php was die enigste manier om PHP uit te voer.

Phusion Passenger (ook bekend as mod_rack aka mod_rails) los hierdie probleem op deur basies op te gee en die probleem te systap:hulle laat eenvoudig 'n aparte kopie van MRI in 'n aparte proses vir elke aansoek uitvoer.Dit werk wonderlik, en nie net vir Ruby nie.Dit ondersteun WSGI (standaard koppelvlak vir Python Web Frameworks), Rak (standaard koppelvlak vir Ruby Web Frameworks) en direkte ondersteuning vir Ruby on Rails.

My hoop is op mod_rubinius, wat ongelukkig nog nie bestaan ​​nie. Rubinius is van die begin af ontwerp om draadveilig, inbedbaar, vry van globale toestand te wees, nie die C-stapel te gebruik nie, ensovoorts.Dit is ontwerp om verskeie Rubinius VM's binne een Rubinius-proses te kan laat loop.Dit maak mod_rubinius oneindig makliker om te implementeer en in stand te hou as mod_ruby.Ongelukkig is Rubinius natuurlik nog nie vrygestel nie, en die werklike werk aan mod_rubinius kan nie eers begin voordat Rubinius vrygestel is nie.Die goeie nuus is dat mod_rubinius reeds meer mannekrag agter die rug het as wat mod_ruby ooit gehad het, want dit het ontwikkelaars betaal wat daaraan werk deur 'n Rails-gasheermaatskappy wat desperaat wil dit self gebruik.

Ander wenke

Daar is Phusion Passenger , 'n robuuste Apache module wat kan hardloop Rack programme met minimum opset. Dit word 'n beroep op gedeel leërskare, en draai 'n program in 'n Rack aansoek is verspot maklik:

  

'n rak aansoek is 'n Ruby voorwerp   (Nie 'n klas) wat reageer op call.   Dit neem presies een argument , die   omgewing en keer terug 'n verskeidenheid van   presies drie waardes : Die status, die   kop, en die liggaam.

Dit is dalk die moeite werd om dubbel-verheldering punt mislav se dat mod_rails is nie eintlik beperk tot Rails kode at all. Die nuwe naam, mod_rack, is 'n beter manier. Trivially klein programme kan rackable wees - hulle voorbeeld wese:

class HelloWorld
  def call(env)
    [200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
  end
end

Daar is 'n: mod_ruby , maar dit het nie in ongeveer 2 jaar gehandhaaf.

Daar is mod_rails en dit kan hardloop Rack aansoeke, wat meer kan jy nodig het?

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top