# Woriking under webrick but not under passenger

**URL:** <https://www.ruby-forum.com/t/woriking-under-webrick-but-not-under-passenger/187608>\
**Category:** Rails\
**Created:** [April 26, 2010, 7:24pm UTC](https://www.ruby-forum.com/t/woriking-under-webrick-but-not-under-passenger/187608 "2010-04-26T19:24:57Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![nesko](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ecd19e/32.png) [@nesko](https://www.ruby-forum.com/u/nesko)\
**Post date:** [April 26, 2010, 7:24pm UTC](https://www.ruby-forum.com/t/woriking-under-webrick-but-not-under-passenger/187608/1 "2010-04-26T19:24:57Z")

</div>

Hi!

I have just added login feature to my rails application (followed the  
instruction from (Agile Web D. with Rails) but now I am getting  
strange errors (looks to me like some kind of routing problem) under the  
passenger/apache.

The error is:  
500 Internal Server Error  
The server encountered an internal error or misconfiguration and was  
unable to complete your request.

From the log:

e[4;36;1mSQL (0.3ms)e[0m e[0;1mSET SQL\_AUTO\_IS\_NULL=0e[0m

Processing **Controller#index (for 192.168.1.101 at 2010-04-26  
18:56:24) [GET]  
e[4;35;1mUser Columns (1.7ms)e[0m e[0mSHOW FIELDS FROM `users`e[0m  
e[4;36;1mUser Load (0.7ms)e[0m e[0;1mSELECT \* FROM `users` WHERE  
(`users`.`id` IS NULL) LIMIT 1e[0m  
Redirected to https://**\*\*/login/login\_page  
Filter chain halted as [:authorize] rendered\_or\_redirected.  
Completed in 31ms (DB: 3) | 302 Found [https://\*\*\*\*\*\*/]

Does anybody has any suggestion what I could do?

* * *

class LoginController \< ApplicationController

def add\_user  
@user = User.new(params[:user])  
if request.post? and @user.save  
flash.now[:notice] = “User #{@user.name} created”  
@user = User.new  
end  
end

def login\_page  
session[:user\_id] = nil  
if request.post?  
user = User.authenticate(params[:name], params[:password])  
if user  
session[:user\_id] = user.id  
session[:user\_name] = user.name  
uri = session[:original\_uri]  
session[:original\_uri] = nil  
redirect\_to(uri || { :action =\> “index” })  
else  
flash[:notice] = “Invalid user/password combination”  
end  
end  
end

def logout  
session[:user\_id] = nil  
flash[:notice] = “Logged out”  
redirect\_to(:action =\> “login\_page”)  
end

def index  
end

def delete\_user  
if request.post?  
user = User.find(params[:id])  
if User.count == 1  
flash[:notice] = “You can’t remove last remaining user!”  
else  
user.destroy  
end  
end  
redirect\_to(:action =\> :list\_users)  
end

## def list\_users @all\_users = User.find(:all) end end

class ApplicationController \< ActionController::Base  
before\_filter :authorize, :except =\> :login\_page  
helper :all # include all helpers, all the time  
protect\_from\_forgery # See ActionController::RequestForgeryProtection  
for details  
def create\_default\_variables(ctrl\_name)  
session[:ctrl\_name] = ctrl\_name  
end

# Scrub sensitive parameters from your log

# filter\_parameter\_logging :password

## private def authorize unless User.find\_by\_id(session[:user\_id]) session[:original\_uri] = request.request\_uri flash[:notice] = “Please log in” redirect\_to(:controller =\> “login”, :action =\> “login\_page”) end end end

require ‘digest/sha1’

class User \< ActiveRecord::Base  
validates\_presence\_of :name  
validates\_uniqueness\_of :name  
attr\_accessor :password\_confirmation  
validates\_confirmation\_of :password

def validate  
errors.add\_to\_base(“Missing password”) if hashed\_password.blank?  
end

def self.authenticate(name, password)  
user = self.find\_by\_name(name)  
if user  
expected\_password = encrypted\_password(password, user.salt)  
if user.hashed\_password != expected\_password  
user = nil  
end  
end  
user  
end

# ‘password’ is a virtual attribute

def password  
@password  
end  
def password=(pwd)  
@password = pwd  
create\_new\_salt  
self.hashed\_password = User.encrypted\_password(self.password,  
self.salt)  
end

def after\_destroy  
if User.count.zero?  
raise “Can’t delete last user”  
end  
end

private  
def self.encrypted\_password(password, salt)  
string\_to\_hash = password + “wibble” + salt # ‘wibble’ makes it  
harder to guess  
Digest::SHA1.hexdigest(string\_to\_hash)  
end

## def create\_new\_salt self.salt = self.object\_id.to\_s + rand.to\_s end end

login\_page.html.erb

 Please Log In \<% form\_tag do %\> 

Name: \<%= text\_field\_tag :name, params[:name] %\>

Password: \<%= password\_field\_tag :password, params[:password] %\>

\<%= submit\_tag "Login" %\>

 \<% end %\> 
------------------------------------------- routes.rb

ActionController::Routing::Routes.draw do |map|

map.resources :controller1  
map.resources :controller2  
…

map.root :controller =\> “controller1”

map.connect ‘:controller/:action/:id’  
map.connect ‘:controller/:action/:id.:format’  
end

---

<div class="post-metadata">

**Author:** ![nesko](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ecd19e/32.png) [@nesko](https://www.ruby-forum.com/u/nesko)\
**Post date:** [April 27, 2010, 10:01am UTC](https://www.ruby-forum.com/t/woriking-under-webrick-but-not-under-passenger/187608/2 "2010-04-27T10:01:58Z")

</div>

Just want to add appache log:

[error] [client 192.168.1.101] Request exceeded the limit of 10 internal  
redirects due to probable configuration error. Use  
‘LimitInternalRecursion’ to increase the limit if necessary. Use  
‘LogLevel debug’ to get a backtrace.

“LogLevel debug” didn’t produce any more information.

---

<div class="post-metadata">

**Author:** ![nesko](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ecd19e/32.png) [@nesko](https://www.ruby-forum.com/u/nesko)\
**Post date:** [April 29, 2010, 2:23pm UTC](https://www.ruby-forum.com/t/woriking-under-webrick-but-not-under-passenger/187608/3 "2010-04-29T14:23:53Z")

</div>

It is definitely routing problem.  
I could partially solve the problem by adding this:

map.connect ‘login’, :controller =\> ‘login’, :action =\> “login\_page”  
map.connect ‘login/list\_users’, :controller =\> “login”, :action =\>  
“list\_users”  
map.connect ‘login/add\_user’, :controller =\> “login”, :action =\>  
“add\_user”  
map.connect ‘login/logout’, :controller =\> “login”, :action =\>  
“logout”

to the routes.rb and just first line is working.  
So redirecting to the /login or typing it directly gives login\_page  
action from the login controller.  
The remaining problem is that I still can’t use any action directly like  
/login/list\_users or even /login/login\_page.
