Routing Error

Witam,
postanowiłem spróbować lighttpd z fastcgi by używać aplikacji Railsowych. Jednak gdy próbuję otworzyć localhost/tracks pojawia mi się "Routing error Recognition failed for “/tracks/”. Czy to oznacza, że aplikacja działa tylko nie może czegoś uruchomić? Czy może jest to spowodowane błedami w konfiguracji lighttpd?

Podeślij konfigurację Lighttpd, inaczej ciężko coś ocenić.

#konfiguracja fcgi fastcgi.server = ( ".php" => (( "bin-path" => "/usr/bin/php-cgi", "socket" => "/tmp/php.socket", "max-procs" => 2 )), ".fcgi" => ( "localhost" => ( "socket" => "/tmp/track.socket", "bin-path" => "/home/seban/download/tracks-1.043/public/dispatch.fcgi" ) ) ) alias.url = ("/tracks" => "/home/seban/download/tracks-1.043/public")
Nie wiem czy potrzebnie robiłem alias.url do tego.
Jeszcze wycinek z logów.

ActionController::RoutingError (Recognition failed for "/tracks/"): /vendor/rails/actionpack/lib/action_controller/routing.rb:522:in `recognition_failed' /vendor/rails/actionpack/lib/action_controller/routing.rb:512:in `recognize!' /vendor/rails/railties/lib/dispatcher.rb:38:in `dispatch' /vendor/rails/railties/lib/fcgi_handler.rb:150:in `process_request' /vendor/rails/railties/lib/fcgi_handler.rb:54:in `process!' /usr/lib/ruby/1.8/fcgi.rb:612:in `each_cgi' /usr/lib/ruby/1.8/fcgi.rb:609:in `each' /usr/lib/ruby/1.8/fcgi.rb:609:in `each_cgi' /vendor/rails/railties/lib/fcgi_handler.rb:53:in `process!' /vendor/rails/railties/lib/fcgi_handler.rb:23:in `process!' /home/seban/download/tracks-1.043/public/dispatch.fcgi:24

Ten alias jest niepotrzebny moim zdaniem. W domyślnym konfigu lighttpd dla aplikacji railsowych stoi tak (uwaga: rails-environtment ustawione jest na development):

[code]# Default configuration file for the lighttpd web server

Start using ./script/server lighttpd

server.bind = “0.0.0.0”
server.port = 3000

server.modules = ( “mod_rewrite”, “mod_accesslog”, “mod_fastcgi”, “mod_compress”, “mod_expire” )

server.error-handler-404 = “/dispatch.fcgi”
server.document-root = CWD + “/public/”

server.errorlog = CWD + “/log/lighttpd.error.log”
accesslog.filename = CWD + “/log/lighttpd.access.log”

url.rewrite = ( “^/$” => “index.html”, “^([^.]+)$” => “$1.html” )

compress.filetype = ( “text/plain”, “text/html”, “text/css”, “text/javascript” )
compress.cache-dir = CWD + “/tmp/cache”

expire.url = ( “/favicon.ico” => “access 3 days”,
“/images/” => “access 3 days”,
“/stylesheets/” => “access 3 days”,
“/javascripts/” => “access 3 days” )

Change *-procs to 2 if you need to use Upload Progress or other tasks that

need to execute a second request while the first is still pending.

fastcgi.server = ( “.fcgi” => ( “localhost” => (
“min-procs” => 1,
“max-procs” => 1,
“socket” => CWD + “/tmp/sockets/fcgi.socket”,
“bin-path” => CWD + “/public/dispatch.fcgi”,
“bin-environment” => ( “RAILS_ENV” => “development” )
) ) )

mimetype.assign = (
“.css” => “text/css”,
“.gif” => “image/gif”,
“.htm” => “text/html”,
“.html” => “text/html”,
“.jpeg” => “image/jpeg”,
“.jpg” => “image/jpeg”,
“.js” => “text/javascript”,
“.png” => “image/png”,
“.swf” => “application/x-shockwave-flash”,
“.txt” => “text/plain”
)

Making sure file uploads above 64k always work when using IE or Safari

For more information, see http://trac.lighttpd.net/trac/ticket/360

$HTTP[“useragent”] =~ “^(.MSIE.)|(.AppleWebKit.)$” {
server.max-keep-alive-requests = 0
}[/code]
Czyli document-root jest ustawiony na katalog “public” w twojej aplikacji. Jeśli potrzebujesz, żeby ten sam serwer obsługiwał też aplikacje PHP to może potrzebujesz pokombinować coś z url-rewrite? Wychodzi na to, że twoja aplikacja oczekuje adresu “/” a dostaje “/tracks/”.

Poszedłem na łatwiznę - ustawiłem server.document-root jakos public tej aplikacji, działa ładnie. Ale chciałbym miec normalny serwer http, oraz dodatkowo pod adresem 127.0.0.1/nazwa_aplikacji odpaloną aplikaję railsową. W tym przypadku tracksa. Próbowałem bez tega aliasa. Nie wiem tylko czy dobrze się za to biorę.
Dodałem coś takiego:

$HTTP["url"] =~ "/tracks" { server.document-root = "/home/seban/download/tracks-1.043/public/" server.error-handler-404 = "/dispatch.fcgi" index-file.names = ("index.html","dispatch.fcgi") url.rewrite = ( "^/$" => "index.html", "^([^.]+)$" => "$1.html", "tracks" => "login" ) }
Efekt niestety jest taki sam. PHP mi działa na tym serwerze.

A po co się tak męczyć? :slight_smile:
Użyj mongrela. Wtedy wystarczy, że ustawisz proxy. Prosto łatwo i przyjemnie. :slight_smile: