2010-10-20 11 views
0

Je viens de passer à Rails 3, et j'ai décidé de le prendre pour un tourbillon avec une application de dummy/sandbox. La chose étrange est que je ne peux pas sembler obtenir aucun routes pour travailler!Pourquoi cette route Rails 3 de base ne fonctionne-t-elle pas?

Voici mon problème:

[[email protected]:Dev]$rails new TestApp 
     create 
     create README 
     create Rakefile 
     ... 
[[email protected]:Dev]$cd TestApp/ 
[[email protected]:TestApp]$rails g scaffold widget name:text 
     invoke active_record 
     create db/migrate/20101020115518_create_widgets.rb 
     create app/models/widget.rb 
     ... 
[[email protected]:TestApp]$rake db:migrate 
(in /Users/cobychapple/Dev/TestApp) 
== CreateWidgets: migrating ================================================== 
-- create_table(:widgets) 
    -> 0.0015s 
== CreateWidgets: migrated (0.0016s) ========================================= 

[[email protected]:TestApp]$rake routes 
(in /Users/cobychapple/Dev/TestApp) 
    widgets GET /widgets(.:format)   {:action=>"index", :controller=>"widgets"} 
    widgets POST /widgets(.:format)   {:action=>"create", :controller=>"widgets"} 
new_widget GET /widgets/new(.:format)  {:action=>"new", :controller=>"widgets"} 
edit_widget GET /widgets/:id/edit(.:format) {:action=>"edit", :controller=>"widgets"} 
    widget GET /widgets/:id(.:format)  {:action=>"show", :controller=>"widgets"} 
    widget PUT /widgets/:id(.:format)  {:action=>"update", :controller=>"widgets"} 
    widget DELETE /widgets/:id(.:format)  {:action=>"destroy", :controller=>"widgets"} 

[[email protected]:TestApp]$rails s -d 
=> Booting WEBrick 
=> Rails 3.0.1 application starting in development on http://0.0.0.0:3000 
[[email protected]:TestApp]$ 

Alors maintenant, je Foncez sur mon navigateur et visiter http://localhost:3000/widgets

Rails dit: erreur de routage: Aucun élément correspondant de l'itinéraire "/ widgets"

I ne comprend pas comment les routes rake peuvent montrer que l'itinéraire existe et que le serveur ne le trouvera pas. J'ai fait de nombreuses recherches sur googles et il semble y avoir quelques personnes avec des problèmes de routage dans les rails 3, mais aucun d'eux n'est aussi fondamental que ce que je suis en train de recevoir. Je suis sûr que j'ai raté quelque chose de petit en cours de route mais je ne peux pas pour la vie de moi comprendre! Aucune suggestion?

Mon fichier routes.rb est seulement ce que génère échafaudage + commentaires de documentation:

TestApp::Application.routes.draw do 
    resources :widgets 

    # The priority is based upon order of creation: 
    # skip the rest of the comments... 
end 
+0

Hav vous l'application de fichier/contrôleur/widgets_controller.rb? – shingara

+0

J'ai fait exactement les mêmes étapes que vous avez faites et cela a fonctionné sans problèmes. Bizarre ... – Matt

+0

Oui ... app/controllers/widgets_controller.rb est présent et généré par le script d'échafaudage. Merci pour le chèque tho! – Coby

Répondre

0

Je l'ai fait exactement la même chose et cela a fonctionné pour moi. La seule chose que j'ai fait était d'utiliser la base de données mysql. Pourquoi ne supprimez-vous pas l'application et recommencez-la. Je ne peux pas imaginer ce que tu as manqué.

Ce sont mes étapes:

rails new TestApp -d mysql 
cd TestApp/ 
rails g scaffold widget name:text 
rake db:create 
rake db:migrate 
rake routes 
(in /home/gjp/work/TestApp) 
    widgets GET /widgets(.:format)   {:controller=>"widgets", :action=>"index"} 
    widgets POST /widgets(.:format)   {:controller=>"widgets", :action=>"create"} 
new_widget GET /widgets/new(.:format)  {:controller=>"widgets", :action=>"new"} 
edit_widget GET /widgets/:id/edit(.:format) {:controller=>"widgets", :action=>"edit"} 
    widget GET /widgets/:id(.:format)  {:controller=>"widgets", :action=>"show"} 
    widget PUT /widgets/:id(.:format)  {:controller=>"widgets", :action=>"update"} 
    widget DELETE /widgets/:id(.:format)  {:controller=>"widgets", :action=>"destroy"} 
rails s 

Et puis http://localhost:3000/widgets a marché.

0

Il semble donc que je l'ai résolu le problème (mais je ne comprends toujours pas!):

Ce que je faisais était d'exécuter le script de serveur en utilisant le -d (mode détaché) qui vous ramène directement retour à la console. J'ai essayé d'exécuter le serveur sans l'option -d pour voir quels résultats le journal d'activité du serveur disait, et quand j'ai exécuté le script du serveur de cette façon, il s'est écrasé en disant que le port était déjà utilisé (même si l'exécution ne l'a pas fait t crash?!?!?).

Redémarré. Tout a fonctionné normalement et le script du serveur fonctionne correctement dans les deux modes.

Donc je suppose qu'il devait y avoir un problème de liaison au port d'arrière-plan qui a été effacé avec un redémarrage. Si cela arrive à quelqu'un d'autre dans le futur, je suppose que vous pourriez avoir un processus indésirable (bug MAMP? Rogue mongrel serveur d'une autre application rails?) Lié au port de votre hôte quelque part. Vérifiez pour cela, et si vous ne trouvez rien de redémarrer et voir si elle le corrige.

haussant les épaules

Merci pour vos commentaires tho gars et/ou filles.

3

Vous devez redémarrer le serveur après avoir modifié les itinéraires. Comme vous l'avez dit dans votre réponse, vous avez démarré le serveur avec l'option -d, donc il est passé en arrière-plan, puis vous avez essayé de l'exécuter à nouveau - mais le premier fonctionnait toujours. Vous devriez avoir tué le premier serveur.

Ce processus d'arrière-plan que vous avez mentionné n'était pas un processus malveillant, c'était votre premier serveur.

La réponse est: 1) ne pas démarrer le serveur avec l'option « -d » dans le développement (il sera plus facile de redémarrer ou de le tuer plus tard) 2) toujours redémarrer votre serveur après avoir modifié les routes fichier (ou tout fichier dans config/initializers)

0

Dans un environnement de développement fonctionnant correctement, il ne devrait pas être nécessaire de redémarrer le serveur pour recharger les routes.

En ignorant cela - parce que vous avez démarré votre 2ème tentative de serveur en mode détaché vous n'avez pas vu l'erreur de liaison qu'il a reçue.

Il est généralement plus facile d'exécuter vos serveurs au premier plan pour que vous puissiez voir les erreurs.

Si vous obtenez une erreur de lien, vous pouvez le suivre vers le bas:

sudo netstat -an | grep LISTEN | grep 3000 

ou

ps aux | grep -i rails