在开发中运行时,不会遇到以下错误。
在模型中添加新属性后,在部署到登台服务器时,模型的页面正在生成
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
然后事实上,这些属性在控制台查询中不存在。
无法理解为什么它在开发中而不是在生产模式下工作。
答案 0 :(得分:0)
如果有人遇到此问题......
控制台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
指定环境......