所以,我剛纔得到了這個工作,想通了我應該回答這個問題。我的第一個問題是我搞砸了database.yml。我遺漏了適配器:mysql2行,所以它試圖連接到一個sqlite數據庫,因此只讀錯誤。
一旦我改變了這一點,我可以連接到我的AWS RDS實例,並且我可以播種一個記錄就好了。但是,當我嘗試播種整個500k記錄時,它仍然被殺死。我正在使用AWS免費層,所以我認爲他們的微型實例出於性能原因不允許長時間運行的進程。爲了解決這個問題,我創建了一個rake任務,它將我的seeds.rb文件分割成一堆小文件,例如seeds-01.rb到seeds-1000.rb。
desc "Splits a file into smaller subfiles"
task :subfiles, [:filename, :num_files] => :environment do |task, args|
lines = File.readlines(args[:filename])
num_files = args[:num_files].to_i
lines_per_file = lines.count/num_files
extension = File.extname(args[:filename])
basename = File.basename(args[:filename])
puts lines_per_file.to_s
puts lines.count.to_s
num_files.times do |num_file|
subfile = File.open(basename + "-#{num_file}" + extension, "w")
subline_start = num_file*lines_per_file
subline_end = (num_file+1)*lines_per_file-1
subline_end = lines.count-1 if num_file == num_files-1
sublines = lines[subline_start..subline_end].each do |subline|
subfile.puts subline
end
subfile.close
end
end
於是,我產生一個bash腳本運行的每個文件,就像這樣:
rails runner seeds-01.rb
rails runner seeds-02.rb
...
rails runner seeds-1000.rb
應當指出的是,我嘗試以下爲好,不管出於什麼原因,這是非常非常比使用rails runner慢。
sudo cp seeds-01.rb seeds.rb
rake db:seed
...
sudo cp seeds-1000.rb seeds.rb
rake db:seed
所以不要那樣做。那麼,在我使用彈性beanstalk命令行工具來部署我的應用之後,我使用了我的實例並運行了我的bash腳本。
cd /var/app/current/db
bash bash-script.txt
這確保了文件足夠小以至於它停止超時。