【问题标题】:rails3 undefined method error for existing attribute in production生产中现有属性的rails3未定义方法错误
【发布时间】:2014-07-21 18:44:03
【问题描述】:

在开发中运行,没有遇到如下错误。

为模型添加了新属性后,在部署到登台服务器后,模型的页面正在生成

ActionView::Template::Error (undefined method `[...]' for #<Optionrate:)x)))... 

它引用了当前 schema.rb 文件中存在的属性,并且恰好在 attr_accessible 中列出。在 _form 对属性的调用中以及在属性(作为布尔值)通过 if 子句调用的视图中都会引发错误,例如:

<% if @optionrate.auto_price %>

我什至可以通过控制台添加新属性

Optionrate.all.each { |n| n.update_attribute(:auto_price, true)}

有许多具有相同前缀的布尔值,或者属性名称中可能有两个下划线,我更改了名称,重新运行所有内容并获得相同的行为!

更新了两个模型后,另一个模型生成相同的未定义方法错误。因此,错误显然是由于结构变化而发生的。

迁移所遵循的步骤是:

pg_dump the existing DB
rake db:migrate VERSION=0
deploy changes
rake db:migrate
psql load existing data

** 更新 **
事实证明,环境存在差异。首先,我在花园小路上;需要调用生产环境的控制台 RAILS_ENV=生产包 exec rails c

那么事实上,这些属性并没有出现在控制台查询中。

无法理解为什么它在开发模式下而不是在生产模式下工作。

【问题讨论】:

    标签: ruby-on-rails-3.2 postgresql-9.3 dev-to-production


    【解决方案1】:

    如果有人遇到这个问题...

    控制台 rake 命令不一定知道要执行的环境。因此,我实际上并没有修改生产数据(作为一个大文件,我没有阅读所有的 postgresql 消息......

    pg_dump the existing DB
    RAILS_ENV=production bundle exec rake db:migrate VERSION=0
    deploy changes
    RAILS_ENV=production bundle exec rake db:migrate
    psql load existing data
    

    指定环境...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多