создание контроллера в Rails - PullRequest
0 голосов
/ 29 ноября 2009

Я пытаюсь использовать сценарий генерации для создания контроллера. Я запускаю следующую команду:

> ruby script/generate controller Greeting

и контроллер, похоже, генерируется без проблем. Затем я добавляю метод с именем index в GreetingController:

class GreetingController < ApplicationController
  def index
    render :text => "<h1>Welcome to your first Rails application<h1>"
  end
end

Затем я запускаю веб-сервер WEBrick и указываю моему браузеру http://127.0.0.1:3000/greeting,, но в браузере появляется сообщение об ошибке:

We're sorry, but something went wrong.

We've been notified about this issue and we'll take a look at it shortly.

Это должно работать, по крайней мере, согласно книге, которую я читаю, Ruby on Rails от O'Reilly . Есть идеи, что может пойти не так? Книга была написана несколько лет назад, и я использую, возможно, более новую версию или Rails. Есть идеи?

ОБНОВЛЕНИЕ Вот что находится в разработке.log:

/!\ FAILSAFE /!\  Sat Nov 28 22:11:12 -0500 2009
  Status: 500 Internal Server Error
  no such file to load -- mysql
    /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'

К вашему сведению Я создал приложение по телефону:

rails /home/myuser/www/mynewapp -d mysql

Ответы [ 5 ]

2 голосов
/ 29 ноября 2009

Rails предполагает, что вы будете использовать базу данных. Если вы не дадите ей допустимую строку подключения в database.yml, она заклинит прямо из шлюза. Это допустимое предположение, поскольку любое реальное веб-приложение будет использовать базу данных.

Но, если вы просто пытаетесь разобраться с тем, как работают представления и контроллеры, вы можете полностью отключить функциональность базы данных. Для этого добавьте это в ваш config / environment.rb:

config.frameworks -= [ :active_record ]
2 голосов
/ 29 ноября 2009

Вы не можете загрузить драйвер базы данных MySQL. Я предполагаю, что это не установлено. Вы можете попробовать это:

sudo gem install mysql

Я предполагаю, что вы, вероятно, не настроили базу данных MySQL. Большинство людей используют sqlite3 для разработки. Ваш config / database.yml должен выглядеть так:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

Если у вас не установлен sqlite3, просто запустите

sudo gem install sqlite3-ruby

Затем запустите миграцию, и все будет готово

rake db:migrate

Обновление Я разместил это здесь, чтобы использовать форматирование.

В будущем просто позвоните:

rails /path/to/app

Это заставит Rails использовать базу данных по умолчанию sqlite3. Затем вы можете изменить производственную базу данных, если / когда вы решили развернуть.

Удачи.

1 голос
/ 29 ноября 2009

Из краткой ошибки, которую вы опубликовали, вы можете проверить, что у вас установлен mysql gem, если вы планируете использовать mysql.

Если вы используете Linux, попробуйте:

gem install mysql
0 голосов
/ 29 ноября 2009

Он пытается загрузить драйвер MySQL. Вы редактировали config / database.yml? Моя выглядит так:

# SQLite version 3.x
# gem install sqlite3-ruby (not necessary on OS X Leopard)
development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

Кроме того, переключитесь на Agile Web Development с Rails, третье издание. Это хороший учебник, который до сих пор в основном работает с последней версией rails, хотя он написан для 2.2

0 голосов
/ 29 ноября 2009
  1. Проверьте логин в своем / лог каталог. Это даст вам далеко лучшая информация об ошибках.
  2. Я предполагаю, что вы получаете ошибку двойного рендеринга - поскольку вы Вызов Render явно, вам нужно поставить заявление о возврате после вашего сделать звонок. - по умолчанию контроллер пытается визуализировать вид соответствует вашему контроллеру после метод контроллера завершен.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...