2011-03-18 77 views
4

由於某種原因,當我嘗試通過heroku進行操作時,我的db:seed未能正常工作。當我在本地執行它時,它工作正常。Rake db:種子在本地工作,heroku rake db:嘗試將null插入到id列的種子

[email protected]:~/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放在id列中,它對我沒有任何意義。

這裏是我的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 

回答

2

有沒有可能您的數據庫遷移沒有爲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; 
+0

我想表ID是Rails的處理全部由自己一列。它爲我的其他表格工作,沒有明確的序列聲明。無論如何,我嘗試在我最初創建的metric_records表中實現您的解決方案,並收到以下錯誤:'code'rake aborted! 發生錯誤,此次和所有後來的遷移取消: 未定義的方法'metric_records_id_seq'爲# 2011-03-24 01:05:51

+0

您是對的:Rails確實透明地處理ID列。我正在理論上,出於某種原因,Heroku上該表的​​定義已經以整數ID而不是串行類型結束。我的答案被建議作爲Heroku中Postgres數據庫的問題的修復,但不是您的本地開發數據庫(SQLite不知道這些命令是做什麼的)。我承認,這是一個長鏡頭。 – Scott 2011-03-24 10:43:22

+0

謝謝,我感謝幫助。我想我會用不同的設計,沒有這張桌子,希望我不會因爲另一張桌子而產生錯誤。 – 2011-03-25 08:19:06

相關問題