Railstutorial.org Проблема Ruby on Rails Routing - PullRequest
0 голосов
/ 02 февраля 2011

Я слежу за скринами Майкла Хартла с railstutorial.org.У меня под рукой только небольшой опыт работы с PHP, html и css, и я в порядке с командами bash, но объектно-ориентированные языки для меня совершенно новые.

Вот проблема: у меня естьприложение под названием sample_app.Из командной строки:

 .../sample_app$ rails generate controller Pages home contact

Теперь, когда я смотрю на route.rb:

 SampleApp::Application.routes.draw do

    get "pages/home"

    get "pages/contact"

А когда я смотрю на pages_controller, я вижу:

  class PagesController < ApplicationController

      def home
      end

      def contact
      end
end

Когда я пытаюсь перейти на "localhost: 3000 / pages / home", я получаю следующую страницу ошибки:

Ошибка маршрутизации

Не найдено ни одного маршрута "/ pages / home"

У меня есть подозрение, что здесь происходит что-то еще, потому что я создаю статический html-файл в папке Public и не могу его загрузить либо:

Вот мой статическийстраница в общедоступных:

<html>
<h1> TACO!</h1>
    <body>
        <p> testing <p>
    </body>
</html>

И когда я пытаюсь перейти к «localhost: 3000 / taco.html», я получаю тот же тип ошибки:

Ошибка маршрутизации

Не найдено ни одного маршрута "/taco.html"

  • РЕДАКТИРОВАТЬ: Кстати, localhost: 3000 сам по себе прекрасно загружает страницу index.html" welcome to rails blah "..

Вы будете удивлены, как долго я пытался это выяснить.У меня такое ощущение, что это либо супер простое исправление, либо что-то ужасно неправильно.Один или другой ...

Точно так же: Rails 3.0.3 ruby ​​1.8.7 (2010-01-10 patchlevel 249) [i486-linux] gems 1.4.2

Есть идеи?Это вполне может быть сделка RTFM, если это так, просто скажите мне, и я буду выглядеть сложнее ...

Ответы [ 4 ]

0 голосов
/ 24 сентября 2011

Спасибо за публикацию вашего ответа, у меня возникла такая же проблема. Я не знаю, что это за lsof и kill, но я закрыл терминал с работающим сервером, затем перезапустил $ rails generate controller Pages home contact, а затем запустил $ rails server, и после этого мой localhost: 3000 / pages / home работал, как показано на странице 81.

0 голосов
/ 02 февраля 2011

Что ж, похоже, учебник, который вы используете, является учебником по Rails 2. В Rails 3 язык маршрутизации изменился. То, что вы хотите, выглядит следующим образом.

SampleApp::Application.routes.draw do
  match "/home" => "pages#home"
  match "/contact" => "pages#contact"
end

Затем вы создадите "app / views / pages / home.html.erb" и "app / views / pages / contact.html.erb". Что бы вы ни указали в этих двух html-файлах, они будут отображаться при переходе в / home или / contact. Переменные определены в файле контроллера app / controllers / pages.rb. Если вы определите:

def contact
  @contact = 'John Smith'
end

Затем вы можете получить доступ к этому в "app / views / pages / contact.html.erb" следующим образом.

<h1>Contact name: <%= @contact %></h1>
0 голосов
/ 02 февраля 2011

Я понял это. Я дурачок rails все еще работал в фоновом режиме из моего старого приложения ...

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

rails s &

Чтобы я мог продолжать использовать окно терминала. Но это вызывает проблему невозможности простого выключения сервера с помощью Ctrl C.

Так я и сделал lsof -i :3000

, что соответствует:

COMMAND   PID  USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
ruby1.8 20667 kevin    5u  IPv4 7193288      0t0  TCP *:3000 (LISTEN)

тогда я убил его:

kill -9 20667

С небольшой помощью от Google, конечно ... Сладкий! Спасибо за помощь, зная, что это работает на чужой стороне, а не на моей, было хорошим началом, и я действительно многому научился, просматривая эту документацию в любом случае…

0 голосов
/ 02 февраля 2011

Я воссоздал ваше приложение до сих пор, и оно отлично работает, я бы посоветовал вам проверить вашу установку Rails и gem файлов.

EDIT. Я использую рельсы 3, и он отлично работает.

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