Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rake db:seed在本地工作,heroku Rake db:seed试图在id列中插入null_Ruby On Rails 3_Heroku_Rake_Seeding - Fatal编程技术网

Ruby on rails 3 Rake db:seed在本地工作,heroku Rake db:seed试图在id列中插入null

Ruby on rails 3 Rake db:seed在本地工作,heroku Rake db:seed试图在id列中插入null,ruby-on-rails-3,heroku,rake,seeding,Ruby On Rails 3,Heroku,Rake,Seeding,由于某种原因,当我试图通过heroku实现db:seed时,它不起作用。我在本地做的时候效果很好 paul@paul-laptop:~/rails_projects/foglift$ heroku rake db:seed rake aborted! PGError: ERROR: null value in column "id" violates not-null constraint : INSERT INTO "metric_records" ("metric_id", "id", "

由于某种原因,当我试图通过heroku实现db:seed时,它不起作用。我在本地做的时候效果很好

paul@paul-laptop:~/rails_projects/foglift$ heroku rake db:seed
rake aborted!
PGError: ERROR:  null value in column "id" violates not-null constraint
: INSERT INTO "metric_records" ("metric_id", "id", "created_at", "updated_at", "value", "school_id", "date") VALUES (1, NULL, '2011-03-18 20:26:39.792164', '2011-03-18 20:26:39.792164', 463866000.0, 1, '2009-01-01') RETURNING "id"

(See full trace by running task with --trace)
(in /app/5aca24ae-c5a7-4805-a3a1-b2632a5cf558/home)
我不知道为什么它试图在id列中输入null,这对我来说没有任何意义

这是我的seeds.rb文件

# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).


  directory = "db/seed_data/"

# Pre-load All Schools
  School.delete_all
  path = File.join(directory, "schools.txt")
  open(path) do |schools|
    schools.read.each_line do |school|
      name, city, state, website, tuition, debt = school.chomp.split("|")
      School.create!(:name => name, :city => city, :state => state, :website => website, :current_tuition => tuition, :current_avg_debt => debt)
    end
  end

# Pre-load All Dashboards
  Dashboard.delete_all
  path = File.join(directory, "dashboards.txt")
  open(path) do |dashboards|
    dashboards.read.each_line do |dashboard|
     name, extra = dashboard.chomp.split("|")
     Dashboard.create!(:name => name)
    end
  end

# Pre-load All Metrics
  Metric.delete_all
  path = File.join(directory, "metrics.txt")
  open(path) do |metrics|
    metrics.read.each_line do |metric|
     name, dashboard_id, display, source = metric.chomp.split("|")
     Metric.create!(:name => name, :dashboard_id => dashboard_id, :display => display, :source => source)
    end
  end

# Pre-load All Metric Records
  MetricRecord.delete_all
  path = File.join(directory, "metric_records.txt")
  open(path) do |values|
    values.read.each_line do |value|
      metric_id, value, date_string, school_id = value.chomp.split("|")
      date_string = '01/01/' << date_string
      date = Date.strptime(date_string, "%d/%m/%Y") unless date_string.nil?
      MetricRecord.create!(:metric_id => metric_id, :value => value, :date => date, :school_id => school_id)
    end
  end
#此文件应包含为数据库添加默认值所需的所有记录创建。
#然后可以使用rake db:seed加载数据(或者使用db:setup与db一起创建)。
directory=“db/seed\u data/”
#预装所有学校
学校。全部删除
path=File.join(目录“schools.txt”)
开放式(小路)学校|
学校。阅读。每行都做学校|
名称、城市、州、网站、学费、债务=school.chomp.split(“|”)
学校,创造!(:name=>name,:city=>city,:state=>state,:website=>website,:current\u tutory=>tutory,:current\u avg\u debt=>debt)
结束
结束
#预加载所有仪表板
Dashboard.delete_all
path=File.join(目录“dashboards.txt”)
打开(路径)do |仪表板|
dashboards.read.each_line do|仪表板|
名称,extra=dashboard.chomp.split(“|”)
Dashboard.create!(:name=>name)
结束
结束
#预加载所有指标
Metric.delete_all
path=File.join(目录“metrics.txt”)
开放(路径)do |度量|
metrics.read.each_line do| metric|
名称、仪表板id、显示、源=metric.chomp.split(“|”)
米制,创造!(:name=>name,:dashboard\u id=>dashboard\u id,:display=>display,:source=>source)
结束
结束
#预加载所有度量记录
MetricRecord.delete_all
path=File.join(目录“metric_records.txt”)
打开(路径)do |值|
values.read.each_line do| value|
公制id,值,日期字符串,学校id=value.chomp.split(“|”)
日期字符串='01/01/'metric\u id,:value=>value,:date=>date,:school\u id=>school\u id)
结束
结束

您的数据库迁移是否可能没有为Heroku数据库上的metric_records ID列创建序列

您可以使用以下方法修复它:

CREATE SEQUENCE metric_records_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

ALTER SEQUENCE metric_records_id_seq OWNED BY metric_records.id;

我认为表id是Rails自己处理的列。它适用于我的其他表,没有明确的序列声明。无论如何,我尝试在我的初始create metric_records表中实现您的解决方案,并收到以下错误:“code”rake中止!发生了一个错误,此迁移和所有后续迁移都已取消:未定义的方法“metric_records_id_seq”for#您是对的:Rails确实透明地处理id列。我的理论是,由于某种原因,Heroku上该表的定义以整数ID而不是串行类型结束。我的回答被建议用于解决Heroku中Postgres数据库的问题,但不是您的本地开发人员数据库(SQLite不知道这些命令的作用)。我承认这是一个不可能的机会。谢谢,我感谢你的帮助。我想我会采用一种不同的设计,没有这个表,希望我不会在另一个表上出错。