Completed 406 Not Acceptable

After migrating my 2.3.9 app to rails 3.0.0 I get this error:

  Completed 406 Not Acceptable in 513ms

I also noted that processing controller doesn’t output the protocol:

– Processing by Admin::PhotographersController#update as

while if it works, say:

– Processing by Admin::PhotographersController#update as HTML

Here is the full action output

Can anyone help me, please ?
Don’t know where to start :frowning:


On Sep 28, 9:54 pm, lgs [email protected] wrote:

– Processing by Admin::PhotographersController#update as HTML

Here is the full action output

Can anyone help me, please ?
Don’t know where to start :frowning:

At a guess it’s because the url being posted to is /admin/photographer.
1 which may be making part of rails think that the requested format
is .1 (as opposed .html, .xml etc), so when you get to your respond_to
block rails can’t generate a response and so generates a 406 instead
(which is http for “I can’t generate the kind of response you asked


It’s goes through Admin::PhotographersController#edit action, opening
a form which I have to fill:

def edit
@photographer = current_photographer

then it goes to Admin::PhotographersController#update :

def update
@photographer = current_photographer
if params[:id]
# trying to update a specific photographer on a singular
resource is a no-no
flash[:notice] = “You can only update your own settings!”
redirect_to edit_resource_path
update!{ edit_resource_path }

here is the controller
and here it is the view ( … or, follow a
snap )

= form_for(:photographer, @photographer, :url => resource_path, :html
=> { :multipart => true, :method => :put }) do |f|

= f.label :theme
= :theme, Photographer.themes
= f.label :use_watermark, “Automatically watermark your client
= f.check_box :use_watermark


On Sep 29, 10:06 am, Frederick C. [email protected]

… ok, this is the piece of log which works ( Rails 2.3.8 )

[paperclip] Saving attachments.
SQL (49.3ms) COMMIT
Redirected to http://localhost:3000/admin/photographer/edit
Completed in 223ms (DB: 0) | 302 Found [http://localhost/admin/

after migrating to Rails 3.0.0 I get this:

[paperclip] Saving attachments.
SQL (595.4ms) COMMIT
Completed 406 Not Acceptable in 812ms

so I guess the failing code in my controller
Admin::PhotographersController#update is

  redirect_to edit_resource_path

… any suggestion ?
How can I procede troubleshooting ?

Thanks in advance

I agree with Fred. What does your ‘Accept’ header in your browser say
for the request that throws the 406? eg. Accept:text/css Also, check the
content-type in the response headers. You could grab this information
using the developer console in safari or chrome, or firebug in firefox.

I saw something very similar which affect Firefox, but not Safari or


I’m not sure to have the competence to fully understand your &
Frederick question,
so please, could you tell me how/where can I check that ?

Thanks in advance

On Sep 30, 12:30 pm, lgs [email protected] wrote:

I’m not sure to have the competence to fully understand your &
Frederick question,
so please, could you tell me how/where can I check that ?

I’d check what the url the form posts to is - does it look right? (ie
view the html produced by the edit form)


No it’s wrong, it is a POST to
and tha page doesn’t show up, it’s blank.

In case of Rails 2.3.8 I get - Processing
Admin::PhotographersController#update (for at 2010-09-29
19:19:38) [PUT] - instead of POST and than redirect back to

Here a vision of the failure, Firebug side:

POST photographer.1 http://localhost:3000/admin/photographer.1 406 Not
Acceptable localhost:3000 1 B

Response Headersview source
x-ua-compatible IE=Edge
Connection Keep-Alive
Content-Type text/html; charset=utf-8
Date Thu, 30 Sep 2010 12:09:14 GMT
Server WEBrick/1.3.1 (Ruby/1.8.7/2010-08-16)
X-Runtime 0.849066
Content-Length 1
Cache-Control no-cache
Set-Cookie _lauranovara_session=xxxxx …;
path=/; HttpOnly

Request Headersview source
Host localhost:3000
User-Agent Mozilla/5.0 (X11; U; Linux i686; en-US; rv: Gecko/
20100915 Ubuntu/10.04 (lucid) Firefox/3.6.10
Accept text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Referer http://localhost:3000/admin/photographer/edit
Cookie txtMainTab=Timeline; _lauranovara.com_session=xxxxxxxx

On Sep 30, 2:27 pm, Frederick C. [email protected]

On Sep 30, 1:49 pm, lgs [email protected] wrote:

No it’s wrong, it is a POST tohttp://localhost:3000/admin/photographer.1
and tha page doesn’t show up, it’s blank.

I’d start by finding out why the url generated ends in .1. Something
funny in your routes maybe?


… yes, first thing I did before my very first post,
anyway, can’t understand what’s wrong with it :

Rails 2.3.8 :

map.namespace :admin do |admin|
# session / login / logout
admin.resource :photographer_session
admin.login ‘/login’, :controller =>
“photographer_sessions”, :action => “new”
admin.logout ‘/logout’, :controller =>
“photographer_sessions”, :action => “destroy”
admin.resource :photographer
admin.resources :photographer_password_resets

Rails 3.0.0 :

namespace :admin do
# session / login / logout
resource :photographer_session
match ‘/login’ => ‘photographer_sessions#new’, :as => :login
match ‘/logout’ => ‘photographer_sessions#destroy’, :as
=> :logout
resource :photographer
resources :photographer_password_resets

everything seems ok with the new sintax …, well I think so, anyway
here what “rake routes” show up for admin photographer in both Rails
2.3.8 and Rails 3.0.0

On Sep 30, 2:51 pm, Frederick C. [email protected]

Given the following:

= form_for(:photographer, @photographer, :url => resource_path, :html
=> { :multipart => true, :method => :put }) do |f|


Should resource path be something else like admin_photographer_path ?
I’m just guessing, but I’d also look at removing the :photographer and
:method => :put from the form_for line. I think it’s import to sort out
why your URL is generating incorrectly before we troubleshoot the
content type issue. For example, it might be thinking that .1 is a
suffix just like .html or .css and is setting the resource type based on

Also regarding checking the headers. I’ll assume you’re using or can use
chrome. Look under the View menu -> Developer -> Developer tools. Click
on the first item under resources (which should say 406) and click on
the headers tab. Here you can find the accept and content type headers.


Good point Luke, thank you.

I changed to admin_photographer_path as you suggested and it can pass
the redirection. Anyway something strange is still going on here:

  1. it redirect to http://localhost:3000/admin/photographer/edit.1

there’s still that .1 which smell of .:format mismatching …

  1. I’ve tons of that form_for(:name, @name, :url =>
    resource_path, :html => { :multipart => true, :method => :put }) do |

which are working just fine:

[email protected]:~/rails/altrove/lauranovara$ find . -exec grep “:url =>
resource_path, :html => { :multipart => true, :method => :put })” {}
; -print|grep ^./
[email protected]:~/rails/altrove/lauranovara$

  1. the old 2.3.8 used to work like that with same routing logic …

Even if this make me able to going on, I’d really would like to figure
out what makes me .1 tail :slight_smile:
Until now, I’ve no idea about why my URL is generating
incorrectly …

Many thanks to Luke and Frederick
for your precious suggestions
Luca G.Soave