[en] Installing SilverStripe on IIS server

UPDATE 2009-02-17: As Sigurd from Silver­Stri­pe team sta­tes in a com­ment, You sho­uld­n’t need to fol­low my „how­to” — at least if You’re using IIS 7. Sin­ce I wro­te this „how­to”, Silver­Stri­pe websi­te has been impro­ved to inc­lu­de instal­la­tion instruc­tions on IIS so ple­ase give it a try befo­re pro­ce­eding with my old instructions.

1. Install ISAPI/Rewrite. I have no idea how to do it sin­ce it was alre­ady instal­led at my pro­vi­de­r’s server, but the­re pro­ba­bly is a limi­ted free ver­sion that is enough.
2. Down­lo­ad Silver­Stri­pe archi­ve and extract it to Your server.
3. Go to Your serve­r’s URL and fill in instal­ler deta­ils as usual.
4. After rew­ri­te­test fails, cre­ate httpd.ini file in Silver­Stri­pe root direc­to­ry and make its con­tents like that (what it basi­cal­ly does with ISAPI/Rewrite is to mimic Apa­che­’s mod_rewrite):

[ISAPI_Rewrite] RewriteEngine On

RewriteCond URL (?!.*gif|.*jpg|.*png|.*swf|.*xml|.*css|.*flv|.*js|.*php).*
RewriteCond URL (?!.*\?).*
RewriteRule (.*) /sapphire/main.php\?url=$1 [I,L]

RewriteCond URL (?!.*gif|.*jpg|.*png|.*swf|.*xml|.*css|.*flv|.*js|.*php).*
RewriteCond URL .*\?.*
RewriteRule (.*)\?(.*) /sapphire/main.php\?url=$1&$2 [I,L]

5. Click „click here to pro­ce­ed any­way” link and You sho­uld be redi­rec­ted to an ugly looking „suc­cess­ful­ly instal­led” page.
6. Now edit /sapphire/core/control/Director.php file and change

$s = (isset($_SERVER[‘SSL’]) || isset($_SERVER[‘HTTPS’])) ? ‘s’ : ”;

line to

$s = (isset($_SERVER[‘SSL’]) || (isset($_SERVER[‘HTTPS’]) && $_SERVER[‘HTTPS’] == ‘on’)) ? ‘s’ : ”;

7. Refresh the „suc­cess­ful­ly instal­led” page and if it looks pret­ty now, You know You cor­rec­tly did step 6.
8. Click „Click here to dele­te the install files.” link so You don’t have a secu­ri­ty hole.
9. Now edit /sapphire/main.php file and at the very begin­ning add the­se lines:

if (!isset($_SERVER[‘REQUEST_URI’])) {
$_SERVER[‘REQUEST_URI’] = $_SERVER[‘SCRIPT_NAME’];
}

10. Fol­lo­wing are hacks I needed to add so i18n works on IIS. If You don’t use i18n, You’ll pro­ba­bly be fine witho­ut the­se hacks. This method is in sapphire/core/i18n.php file:

pro­tec­ted sta­tic func­tion get_owner_module($name) {
if (substr($name,-3) == ‘.ss’) {
glo­bal $_TEMPLATE_MANIFEST;
$path = current($_TEMPLATE_MANIFEST[substr($name,0,-3)]);
// hacks for IIS start –>
$path = str_replace(‘\sapphire/..’, ”, $path);
$path = str_replace(‘C:’, ”, $path);
$path = str_replace(‘\’, ‘/’, $path);
$bf = Director::baseFolder();
$bf = str_replace(‘C:’, ”, $bf);
$bf = str_replace(‘\’, ‘/’, $bf);
// – end hacks
ereg($bf . ‘/([^/]+)/’,$path,$module);
} else {
glo­bal $_CLASS_MANIFEST;
$path = $_CLASS_MANIFEST[$name];
// hacks for IIS start –>
$path = str_replace(‘\sapphire/..’, ”, $path);
$path = str_replace(‘C:’, ”, $path);
$path = str_replace(‘\’, ‘/’, $path);
$bf = Director::baseFolder();
$bf = str_replace(‘C:’, ”, $bf);
$bf = str_replace(‘\’, ‘/’, $bf);
// – end hacks
ereg($bf . ‘/([^/]+)/’,$path,$module);
}
return $module[1];
}

11. Enjoy 🙂
12. If You can’t enjoy for some reason, try chec­king out this thre­ad at Silver­Stri­pe forum whe­re most of the abo­ve info is found.

Duży może bardziej… olewać

Mer­lin to duży sklep, ale to nie ozna­cza, że jest przy­ja­zny dla użyt­kow­ni­ków. — napi­sa­ła Shrew. 

I ma rację. Im więk­szy sklep tym więk­sza szan­sa że klient zosta­nie kom­plet­nie olany.

Moje ostat­nie doświad­cze­nie z Comar­chem — potęż­na fir­ma, popu­lar­na mar­ka CDN. Ale ich sklep inter­ne­to­wy to ist­ne kuriozum:

  1. Mimo iż wer­sję demo opro­gra­mo­wa­nia moż­na pobrać z inter­ne­tu, zaku­pio­ną wer­sję peł­ną moż­na otrzy­mać tyl­ko straj­ku­ją­cą Pocz­tą Polską.
  2. Brak moż­li­wo­ści pła­ce­nia onli­ne lub kar­tą kre­dy­to­wą, tyl­ko prze­le­wem bankowym.
  3. 7‑dniowy okres reali­za­cji zamó­wie­nia wyda­je się sam w sobie dość dłu­gi jak na inter­ne­to­wy zakup opro­gra­mo­wa­nia, dopó­ki nie przej­dzie się do punk­tu następnego.
  4. Opro­gra­mo­wa­nie zamó­wio­ne 3 czerw­ca, prze­lew pusz­czo­ny tegoż same­go dnia. Potwier­dze­nie zamó­wie­nia przy­cho­dzi na e‑mail z infor­ma­cją że zamó­wie­nie „cze­ka na potwier­dze­nie skle­pu”. I tak wisi do dziś. 10 czerw­ca wysy­łam e‑maila z przy­po­mnie­niem że cze­kam na zamó­wie­nie. W koń­cu nie wytrzymuję.
  5. Dzwo­nię na nr tele­fo­nu poda­ny w regu­la­mi­nie skle­pu. Pani po dru­giej stro­nie dru­tu nie ma poję­cia o co ją pytam. „Jaki sklep inter­ne­to­wy?”(!) Oka­zu­je się, że dodzwo­ni­łem się do sekre­ta­ria­tu, pani pró­bu­je prze­łą­czyć mnie do dzia­łu han­dlo­we­go, ale niko­go tam nie ma. Pró­bu­ję kil­ku róż­nych nume­rów tele­fo­nu ze stron Comar­chu, nie zapła­ci­łem może dużo, ale chciał­bym cho­ciaż odzy­skać pie­nią­dze. Nikt nie wie co mi powie­dzieć, zanim tra­fiam do dzia­łu mar­ke­tin­gu (a po dro­dze nawet z rzecz­ni­kiem pra­so­wym roz­ma­wia­łem) nikt nawet nie koja­rzy że w ogó­le Comarch ma jakiś sklep internetowy 🙂

Upda­te

Minął week­end po moich tele­fo­nach i zamó­wio­ny pakiet dotarł. Gdy­by nie zgrzyt ze skle­pem inter­ne­to­wym, był­bym pew­nie zado­wo­lo­ny w 100% 😉 No ale przy­naj­mniej usły­sza­łem „prze­pra­sza­my”.

Java: jak zrobić BufferedImage z grafiki SVG

SVG to przy­jem­ny, otwar­ty for­mat gra­fi­ki wek­to­ro­wej. Aby go wyko­rzy­stać w Javie, potrzeb­na będzie biblio­te­ka Batik. Żeby łatwo uzy­skać Buf­fe­re­dI­ma­ge zamiast zapi­sy­wać wyren­de­ro­wa­ne SVG do pli­ku, sko­rzy­sta­my z kla­sy któ­rej kod znaj­du­je się na jed­nej z list dyskusyjnych.

Powyż­sze roz­wią­za­nie moż­na wygo­oglać, lecz oto moja war­tość doda­na 🙂 Mini­mal­na lista pli­ków .jar z Bati­ka, któ­re trze­ba dodać do pro­jek­tu by SVGRen­de­rer dzia­łał prawidłowo:

  • batik-anim.jar
  • batik-awt-util.jar
  • batik-bridge.jar
  • batik-css.jar
  • batik-dom.jar
  • batik-ext.jar
  • batik-gvt.jar
  • batik-parser.jar
  • batik-rasterizer.jar
  • batik-script.jar
  • batik-svg-dom.jar
  • batik-transcoder.jar
  • batik-util.jar
  • batik-xml.jar
  • batik.jar
  • xerces_2_5_0.jar
  • xml-apis-ext.jar