以下のrakeタスクで既存DBからSeedFuで読み込むためのファイルを生成した。
desc 'generate seed-fu'
task master: :environment do |t|
SeedFu::Writer.write('./db/fixtures/master.rb', class_name: 'Master', constraints: [:hoge_key]) do |w|
Master.all.each do |x|
w << x.as_json(except: [:created_at, :updated_at])
end
end
end
そして、いざ出力されたファイルを別サーバで読み込もうと思ったら、エラーが発生。
エラー文言は無くなってしまったが、要はDate型カラムの値が
2017-12-31
から
Sun, 31 Dec 2017
みたいのに変換されていて、かつダブルクォートで囲まれていなかったためだった。
さて、困った時のGoogle先生。
Writer uses inspect to serialize object
凄い対処療法っぽいやり方だけど、とりあえずこれで直った。
SeedFuのWriterを使っているrakeタスクに追記する
eval <<-EOS
class ::ActiveSupport::TimeWithZone
def inspect
"DateTime.iso8601(\#{iso8601.inspect})"
end
end
class ::DateTime
def inspect
"DateTime.iso8601(\#{iso8601.inspect})"
end
end
class ::Date
def inspect
"Date.iso8601(\#{iso8601.inspect})"
end
end
class ::Time
def inspect
"Time.iso8601(\#{iso8601.inspect})"
end
end
EOS
Writer should use code/iso8601 for date/time/datetime, not inspect
こういうプルリクが2014年に出ているけど、マージされていない。
何でだろうー。
コメント