应用程序在开发模式下运行顺畅,但是将其部署到托管服务器上会显示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中正确接收值?
答案 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。