Почему этот основной маршрут Rails 3 не работает? - PullRequest
0 голосов
/ 20 октября 2010

Я только что обновился до Rails 3 и решил принять это за водоворот с помощью приложения-пустышки / песочницы.Странно то, что я не могу заставить работать любые маршруты!

Вот моя проблема:

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

[cobychapple@shiva: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"}

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

Так что теперь я перехожу к своему браузеруи посетите http://localhost:3000/widgets

Rails говорит: Ошибка маршрутизации: не найдено ни одного маршрута "/ widgets"

Я не понимаю, как маршруты rake могут показать, что маршрут существует, а затем сервер несопоставьте это.Я погуглил целую кучу, и, кажется, есть несколько человек с проблемами маршрутизации в rails 3, но ни один из них не настолько очевиден, как то, что я получаю.Я уверен, что только что пропустил что-то маленькое по пути, но я не могу на всю жизнь понять это!Любые предложения?

Мой файл rout.rb - это только то, что генерирует этот скаффолд + комментарии к документации:

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

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

Ответы [ 4 ]

3 голосов
/ 21 октября 2010

Вам необходимо перезагрузить сервер после изменения маршрутов. Как вы сказали в своем ответе, вы запустили сервер с параметром -d, поэтому он перешел в фоновый режим, а затем вы попытались запустить его снова - но первый все еще работал. Вы должны были убить первый сервер.

Этот фоновый процесс, о котором вы упомянули, не был мошенническим процессом, это был ваш первый сервер.

Ответ: 1) не запускайте сервер с параметром '-d' в разработке (так будет легче перезапустить или убить его позже) 2) всегда перезагружайте сервер после изменения файла маршрутов (или любого файла в config / initializers)

0 голосов
/ 13 января 2012

В правильно работающей среде разработки нет необходимости перезагружать сервер для перезагрузки маршрутов.

Игнорирование этого - поскольку вы загрузили вторую попытку сервера в отдельном режиме, вы не увидели ошибку привязкион получил.

Как правило, ваши серверы обычно запускаются на переднем плане, поэтому вы можете увидеть любые ошибки.

Если вы получили ошибку привязки, вы можете отследить ее:

sudo netstat -an | grep LISTEN | grep 3000

или

ps aux | grep -i rails
0 голосов
/ 21 октября 2010

Похоже, я решил проблему (но я до сих пор не понимаю!):

Я выполнял серверный скрипт с использованием -d (режим отсоединения), который возвращает васпрямо к консоли.Я попытался запустить сервер без опции -d, чтобы увидеть, какие результаты выдает журнал активности сервера, и когда я запустил серверный скрипт таким образом, он сразу же упал, сказав, что порт уже используется (хотя при запуске detatched это не так).t crash?!?!?).

Перезагрузка.Все работало как обычно, и серверный сценарий снова работает нормально в любом режиме.

Так что я предполагаю, что должна была быть какая-то фоновая проблема привязки порта, которая была очищена при перезагрузке.Если это случится с кем-то еще в будущем, я предполагаю, что у вас может быть какой-то мошеннический процесс (ошибка MAMP? Сервер-мошенник из другого приложения rails?), Связанный с портом вашего хоста где-нибудь.Проверьте это, и если вы не можете найти что-либо, перезагрузите компьютер и посмотрите, исправляет ли оно это.

пожимаем плечами

Спасибо за ваш вклад, ребята и / или девочки.

0 голосов
/ 20 октября 2010

Я сделал то же самое, и это сработало для меня.Единственное, что я сделал по-другому, - это использование базы данных mysql.Почему бы вам не удалить приложение и сделать это снова.Я не могу представить, что вы пропустили.

Вот мои шаги:

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

А потом http://localhost:3000/widgets сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...