我正在尝试使用generate脚本来创建控制器。我运行以下命令:

> ruby script/generate controller Greeting

并且控制器似乎生成没有问题。然后我向GreetingController添加一个名为index的方法:

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

然后我启动WEBrick Web服务器,并将我的浏览器定向到 http://127.0.0.1:3000/问候,但我在浏览器中收到一条错误消息:

We're sorry, but something went wrong.

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

至少根据我正在阅读的书,它应该是有用的,O'Reilly的 Ruby on Rails 。什么可能出错?这本书是几年前写的,我使用的可能是更新的版本或Rails。有什么想法吗?

UPDATE 以下是development.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
有帮助吗?

解决方案

您无法加载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的默认数据库。然后,您可以在决定部署时更改生产数据库。

祝你好运。

其他提示

Rails假设您将使用数据库。如果你没有在database.yml中给它一个有效的连接字符串,那么它会在门外扼杀。这是一个有效的假设,因为任何真正的 Web应用程序都将使用数据库。

但是,如果您只是想弄乱视图和控制器的工作方式,则可以完全禁用数据库功能。为此,请将其添加到config / environment.rb:

config.frameworks -= [ :active_record ]

根据您发布的简短错误,如果您打算使用mysql,可能需要检查是否安装了mysql gem。

如果你在linux上试试:

gem install mysql

它正在尝试加载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

此外,切换到使用Rails的Agile Web Development,第三版。这是一个很好的教程,并且仍然主要使用最新版本的rails,即使它是为2.2编写的。

  1. 检查/ log中的日志 目录。它会给你带来很大的帮助 更好的错误信息。
  2. 我的猜测是你得到了双重渲染错误 - 因为你是 你需要明确地调用render 在你之后发表一份退货声明 渲染电话。 - 默认情况下, controller尝试渲染视图 之后匹配你的控制器 控制器的方法完成。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top