生产轨迹3路线与开发工作不一样
我目前正试图让我的Ruby(1.8.7)在Rails(3.0.9)应用程序中运行在生产环境中。但是,在转移到生产环境中时,我的路线出现重大问题。例如,在我的代码简称生产轨迹3路线与开发工作不一样
user_path()
但在生产,我不得不改变,要
users_path()
这似乎除非它在
users_path(user)
用于合作哪家产生网址
http://whatwillworkforme.com/users?format=myuser
开发将产生:
http://whatwillworkforme.com/users/myuser
我的路线如下所示。我正在使用代码Smartr项目(https://github.com/dkd/smartr),所以我不熟悉Rails 3路线或为什么做出特定决定。
WhatWillWorkForMeCom::Application.routes.draw do
devise_for :users, :controllers => { :registrations => "registrations",
:passwords => "passwords",
:sessions => "sessions" }
namespace :admin do
resources :comments
resources :treatments
resources :conditions
resources :users
end
match "/conditions/page/:page", :to => "conditions#index"
match "/conditions/hot(/:page)", :to => "conditions#hot"
match "/conditions/active(/:page)", :to => "conditions#active"
match "/conditions/untreated(/:page)", :to => "conditions#untreated"
match "/conditions/tagged/:tag(/:page)", :to => "condition#index"
match "sitemap/" => "sitemap#index"
match 'contact_us' => 'site#contact_us_new', :as => 'contact_us', :via => :get
match 'contact_us' => 'site#contact_us_create', :as => 'contact_us', :via => :post
resources :conditions, :except => [:show, :edit] do
member do
put :update_for_toggle_acceptance
put :update_for_toggle_decline
end
collection do
get :hot
get :active
get :untreated
get :search
end
end
match "/conditions/:id(/:friendly_id)", :to => "conditions#show", :as => :condition
match "/conditions/:id/:friendly_id/edit", :to => "conditions#edit"
match "/site/terms_and_conditions", :to => "site#terms_and_conditions"
scope "/conditions/:condition_id/:friendly_id/" do
get "treatment/:id/edit", :to => "treatments#edit", :as => :edit_condition_treatment
put "treatment/:id", :to => "treatments#update", :as => :condition_treatment
post "treatments", :to => "treatments#create", :as => :condition_treatments
end
match "/admin", :to => "admin#index"
resources :comments
resources :tags, :only => [:index]
resources :votes, :only => [:create]
resources :users, :except => [:destroy] do
collection do
get :who_is_online
get :search
end
member do
get :reputation
end
resources :bookmarks, :only => [:index]
end
resources :bookmarks, :only => [:toggle] do
member do
post :toggle
get :toggle
end
end
match "errors/routing", :to => "errors#routing"
namespace :api do
namespace :v1 do
resources :conditions, :only => [:index]
resources :users, :only => [:index]
end
end
root :to => 'site#index'
match '*a', :to => 'errors#routing'
end
耙路线(如要求)是
new_user_session GET /users/sign_in(.:format) {:action=>"new", :controller=>"sessions"}
user_session POST /users/sign_in(.:format) {:action=>"create", :controller=>"sessions"}
destroy_user_session GET /users/sign_out(.:format) {:action=>"destroy", :controller=>"sessions"}
user_password POST /users/password(.:format) {:action=>"create", :controller=>"passwords"}
new_user_password GET /users/password/new(.:format) {:action=>"new", :controller=>"passwords"}
edit_user_password GET /users/password/edit(.:format) {:action=>"edit", :controller=>"passwords"}
PUT /users/password(.:format) {:action=>"update", :controller=>"passwords"}
cancel_user_registration GET /users/cancel(.:format) {:action=>"cancel", :controller=>"registrations"}
user_registration POST /users(.:format) {:action=>"create", :controller=>"registrations"}
new_user_registration GET /users/sign_up(.:format) {:action=>"new", :controller=>"registrations"}
edit_user_registration GET /users/edit(.:format) {:action=>"edit", :controller=>"registrations"}
PUT /users(.:format) {:action=>"update", :controller=>"registrations"}
DELETE /users(.:format) {:action=>"destroy", :controller=>"registrations"}
user_confirmation POST /users/confirmation(.:format) {:action=>"create", :controller=>"devise/confirmations"}
new_user_confirmation GET /users/confirmation/new(.:format){:action=>"new", :controller=>"devise/confirmations"}
GET /users/confirmation(.:format) {:action=>"show", :controller=>"devise/confirmations"}
who_is_online_users GET /users/who_is_online(.:format) {:action=>"who_is_online", :controller=>"users"}
search_users GET /users/search(.:format) {:action=>"search", :controller=>"users"}
reputation_user GET /users/:id/reputation(.:format) {:action=>"reputation", :controller=>"users"}
user_bookmarks GET /users/:user_id/bookmarks(.:format) {:action=>"index", :controller=>"bookmarks"}
users GET /users(.:format) {:action=>"index", :controller=>"users"}
POST /users(.:format) {:action=>"create", :controller=>"users"}
new_user GET /users/new(.:format) {:action=>"new", :controller=>"users"}
edit_user GET /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
PUT /users/:id(.:format) {:action=>"update", :controller=>"users"}
我不知道为什么开发和生产行为不同,但http://whatwillworkforme.com/users?format=myuser
实际上是对users_path(myuser)
预期的行为。您可以通过运行rake routes
进行验证。你应该得到的东西沿着这些路线:
users GET /users(.:format) users#index
user GET /users/:id(.:format) users#show
任何与在路线起始冒号将可以传递给url_for
或使用它,如任何一个参数。 link_to
。
您应该使用user_path(user)
来获取特定用户的路由(在将路由传递到路由之前,Rails会将ActiveRecord实例转换为它的id
)。
相反,您应该使用users_path
而没有参数,因为您指的是使用复数路线的整个集合。任何参数都会尝试为您的网址提供格式(例如,'xml'
应在网址中添加尾随.xml
)。
在您的具体情况下,还需要注意一条重复路线:POST
致电/users
将被Devise截获,并且不会触及您的控制器create
的操作。
谢谢你。我已经设置了相应的user_path,users_path。我正在尝试耙路线,但因为它似乎试图在开发模式而不是生产中执行所有操作,因此在运行耙路器时遇到了一些问题。将不得不联系托管公司。 – user1302719 2012-04-02 18:44:59
试试这个:'RAILS_ENV = production rake routes',或者更好,在生产机器上执行'export RAILS_ENV = production',这样所有的请求都是在生产环境中完成的。 – amencarini 2012-04-03 15:19:50
感谢您的建议,我与RailsPlayground,事实证明,除非明确指出,一切都是发展。您指定的路线不在耙路线中(我已经包含在上面)。对不起,在响应延迟,但工作和孩子们杀了很多时间:) – user1302719 2012-04-04 08:12:57
'user_path' should work。不是吗? – 2012-04-01 07:16:04
在开发中是,但没有在生产中。它让我困惑:) – user1302719 2012-04-01 07:22:36
你在生产中遇到错误吗? – 2012-04-01 07:22:58