Ruby on Rails i php w jednym domu stały czyli Passenger vs. FastCGI na DreamHost.com

16 Apr 2009 | Adam Przymusiała

Kilka dni temu podczas zmiany grafiki i silnika na przymusiala.net musiałem się zmierzyć z problemem uruchomienia starych skryptów php (blog, galeria, wiki…) wewnątrz nowej aplikacji RoR. Próbowałem wielu sposobów z symlinkami i plikami .htaccess jednak okazało się że mod_rails (Passenger) nadpisuje wszystkie dyrektywy pliku htaccess! (jest jedna instrukcja która to wyłącza jednak wtedy nic już nie działa ;) ).

Rozwiązanie problemu wygląda tak:

  • Dezaktywować mod_rails
  • Aktywować FastCGI
  • Do pliku .htaccess wpisać:
. RewriteEngine On
  RewriteRule .* - [L]
  RewriteRule ^$ index.html [QSA]
  RewriteRule ^([^.]+)$ $1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ dispatch.fcgi?$1 [QSA,L]
  • Poprawić plik dispatch.fcgi:
  require File.dirname(__FILE__) + "/../config/environment"
  require \'fcgi_handler\'
  
  class RailsFCGIHandler

  private
    
    def frao_handler(signal)
      dispatcher_log :info, "asked to terminate immediately"
      dispatcher_log :info, "frao handler working its magic!"
      restart_handler(signal)
    end
  
    alias_method :exit_now_handler, :frao_handler
  end

  RailsFCGIHandler.process!
  • Jako że używam capistrano katalogi z blogiem/galerią umieściłem gdzie indziej niż samą aplikację, a tworzenie symlinków do tych skryptów wewnątrz katalogu "public" wrzuciłem do pliku config/deploy.rb
  namespace(:customs) do
      task :symlink, :roles => :app do
        run >>-CMD
          ln -nfs /home/user/strona.com/rails/piblic/blog /home/user/strona.com/blog
        CMD
      end
    end

  after "deploy:symlink","customs:symlink"
  • No i najważniejsze na koniec :), należy pamiętać by w katalogach bloga czy galerii również założyć plik .htaccess, np.:
   
  mod_rewrite.c
  RewriteEngine On
  RewriteBase /nazwa_katalogu_danej_aplikacji_php/
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /nazwa_katalogu_danej_aplikacji_php/index.php [L]
  

Powyższe niweluje kłopot z uruchomieniem akcji nieistniejącego kontrolera.


Dodaj komentarz!

Czytaj dalej:

16 Apr 2009
Ruby on Rails - jedna aplikacja z wieloma domenami (Dreamhost + Passenger)
Czytaj dalej