Mam następujący problem i nie mogę sobie z nim poradzić. Sytuacja jest taka:
Gdy zostanie wywołany adres: www.adresstrony.pl/kontroler/akcja/parametry
wszystko dzieje się normalnie,
natomiast po wywołaniu
www.subdomena.adresstrony.pl/paramtetr/paramter/paramter/…
Aby został wywołany konkretny kontroler i wszystkie parametry zostały przekazane do jednej akcji.
Na serwerze korzystam z wildcards, i ApplicationControler sprawdzam czy występuje subdomena, jeśli tak to chciałbym, aby nie wykonał się kontroler z adresu, tylko już konkretnie wskazany przezemnie
Z góry dziękuje za odpowiedzi, które mnie naprowadzą na rozwiązanie
Z tego co wiem, to requirements są też w railsach 2.x, ale requirements są trochę ograniczone.
Z pozostałych możliwości:
Możesz użyć mod_rewrite tak jak zaproponował hekto5
Możesz użyć rack rewrite, pozwoli pewnie na wszystko to co mod_rewrite (a może nawet więcej), a reguły możesz trzymać w kodzie.
Można też napisać własny rack middleware, który będzie w zależności od parametrów ustawiał odpowiedni controller/action, albo przepisywał wewnętrznie REQUEST_PATH
Ja bym spróbował na początku rack-rewrite. W metodzie rewrite możesz sprawdzić adres wyrażeniami regularnymi, a jak to nie wystarczy, to w rubim używając lambdy.
A załóżmy, że spróbuje w najprostszy sposób dla mnie czyli mod_rewrite, umieszczam jakiegoś prostego htaccessa w folderze public aplikacji, oraz próbowałem w głównym folderze, ale railsy kompletnie tego nie widzą. Pracuje na localhoscie z InstantRails. Jakieś podpowiedzi?
A drugie pytanie czy mógłbym zrobić np. coś takiego, aby stworzyć nową instancje jakiegoś kontrolera, wywołać jakąś jego akcje i przerwać działanie skryptu, aby nie doszło do wykonania akcji kontrolera z url’a ?
Próbowałem coś zadziałać z rack-rewrite, zacząłem od zainstalowania go jako plugin, ale w folderze vendor/plugins stworzył się jedynie pusty folder o nazwie rack-rewrite, tak ma być, czy zrobiłem coś źle?
Wiem, że pewnie te pytania są dziwne/głupie/banalne, ale dopiero zaczynam z railsami i robię co mogę
No dobrze, udało się uruchomić rack-rewrite, i przykłady działają.
Jednak mam problem aby w momencie gdy występuje subdomena przekierować to na konkretny kontroler, a w innym przypadku żeby został standardowy routing. Próbowałem już na różne sposoby, ale mam odczucie, że działam na ślepo
[quote=Sevin]No dobrze, udało się uruchomić rack-rewrite, i przykłady działają.
Jednak mam problem aby w momencie gdy występuje subdomena przekierować to na konkretny kontroler, a w innym przypadku żeby został standardowy routing. Próbowałem już na różne sposoby, ale mam odczucie, że działam na ślepo
Jakieś podpowiedzi jak to osiągnąć?[/quote]
Oczywiście musiałem nie doczytać, że w całym wątku chodzi o subdomeny
Rozwiązywałem ostatnio taki problem w aplikacji railsowej i napisałem prosty middleware. Wyekstraktowałem to przed chwilą do gema: http://github.com/drogus/rack-subdomain
Zainstaluj gema i wrzuć coś takiego do config/environment.rb:
Pisałem ten middleware dla railsów 3, nie sprawdzalem go z railsami 2.x. Wrzuciłem małą poprawkę, która ustawia request_uri, dzięki czemu railsy 2.x też wskazują na nowy adres.
Zrób gem update rack-subdomain i spróbuj jeszcze raz, teraz powinno zadziałać.