生产模式中的Rails问题,mysql数据库

时间:2011-04-21 19:49:20

标签: mysql ruby-on-rails deployment production-environment

应用程序在开发模式下运行顺畅,但是将其部署到托管服务器上会显示public / 500.html页面(“我们很抱歉,但出了问题”),似乎何时content查询mysql数据库。放置静态内容是有效的,令人费解的动态内容只能在开发中本地工作。

rake db:migrate 正常运行,我手动将测试条目插入到mysql数据库中。

然后请求视图结果为500,日志给出

ActionView::Template::Error (NULL pointer given):
    10:  ...
    11:    <% @projects.each do |project| %>
    12:  ...        

服务器运行MySQL 5.1.54,Rails安装了mysql gem。 任何提示赞赏!

修改

所以我刚开始

rails c production

在远程服务器上并在我的“客户端”模型中创建了一个条目:

irb(main):003:0> c = Client.new => #<Client id: nil, name: nil, permalink: nil, created_at: nil, updated_at: nil> irb(main):004:0> c.name = "realclient" => "realclient" irb(main):005:0> c => #<Client id: nil, name: "realclient", permalink: nil, created_at: nil, updated_at: nil> irb(main):006:0> c.save => true

虽然除了 name 之外的所有字段在irb中显示为空,但服务器上的实际数据库显示所有相应的字段:

2 realclient realclient 2011-04-22 13:59:12 2011-04-22 13:59:12 (id,name,permalink,created,updated)

所以底线:Active Record无法从实际存在的DB中正确接收值?

2 个答案:

答案 0 :(得分:0)

当您运行rake db:migrate时,您可能没有RAILS_ENV设置,因此仍在开发环境中运行。尝试运行:

RAILS_ENV=production rake db:migrate

查看您是否收到错误,如果是,您可以使用--trace选项重新运行它以获取更多详细信息。

您可能需要在config/database.yml上调试此问题 - production 部分中会丢失或配置错误(或者您可能尚未创建数据库或其他内容,我不熟悉那个特定的错误信息。)

答案 1 :(得分:0)

** 已解决 **

我的托管服务提供商只允许使用他们预装的mysql 2.7 gem。在Gemfile中手动加载mysql gem会导致Active Record错误 - 甚至在顶部加载自己的2.7版本。坚持托管服务器上的默认gem。

在服务器上单独设置新数据库可能会启用自定义数据库gem。因此,虽然这是一个非常具体的问题,但也许答案可以帮助其他人在托管服务器上使用rails。