【问题标题】:creating a controller in Rails在 Rails 中创建控制器
【发布时间】:2009-11-29 02:48:34
【问题描述】:

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

> 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 网络服务器,并将我的浏览器定向到 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.

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

更新以下是 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

【问题讨论】:

  • development.log 中有什么内容?看起来您正在获取生产模式错误页面。我尝试了你所拥有的,对我来说效果很好。
  • @MattMcKnight development.log 现已发布在上方
  • Ruby 的哪个版本?导轨?数据库? MySQL?哪个操作系统?我问是因为最新版本的 Rails 已经内置了 SQLite3,并且最新版本的 Rails 不使用 Webrick 作为默认 Web 服务器。 (他们使用 Mongrel)。

标签: ruby-on-rails ruby model-view-controller controller


【解决方案1】:

您无法加载 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。然后,如果/当您决定部署时,您可以更改生产数据库。

祝你好运。

【讨论】:

  • 是的,你几乎完全了解了这里。
  • 嘿史蒂夫,你在运行什么操作系统。你显然遗漏了一些东西:) 我在 OS X 系统上看到过类似的错误,我忘记安装开发人员工具。我会按照 Your operation System install sqlite3 的方式运行 google 搜索
  • 糟糕,没有意识到 cmets 中不允许使用 html 标签。忽略 标签 :)
  • 我正在运行 Ubuntu。我解决了这个问题。我需要先调用“sudo apt-get install sqlite3 swig libsqlite3-ruby libsqlite3-dev”,然后才能安装那个 sqlite3-ruby gem。谢谢您的帮助!我现在开始使用 Rails 了!!! :-)
【解决方案2】:

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

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

config.frameworks -= [ :active_record ]

【讨论】:

  • 这是一个很棒的调试技巧!
【解决方案3】:

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

如果你在 linux 上试试:

gem install mysql

【讨论】:

  • 是的!并且也只是为了确保在你的 shell 配置文件中的 PATH 变量中也有它。这样你就可以测试它了。
【解决方案4】:

它正在尝试加载 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 进行敏捷 Web 开发,第三版。这是一个很好的教程,并且仍然主要适用于最新版本的 rails,即使它是为 2.2 编写的。

【讨论】:

  • 感谢推荐书!我会看看他们是否在 Safari 上找到了它
【解决方案5】:
  1. 检查 /log 中的日志 目录。它会给你远方 更好的错误信息。
  2. 我的猜测是你遇到了双重渲染错误——因为你是 显式调用渲染,你需要 在你的后面放一个退货声明 渲染调用。 -- 默认情况下, 控制器尝试渲染视图 之后匹配您的控制器 控制器的方法完成。

【讨论】:

  • 添加回报似乎没有帮助。我发布了 development.log 文件的前几行。如果需要,我可以发布其余部分,但我怀疑第一条错误消息是问题所在。我去研究一下……
  • 我尝试了他所拥有的,效果很好。这不是双重渲染错误。
猜你喜欢
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多