几天前我尝试过完全相同的事情,但我得出的结论是,由于 heroku 对每个进程施加的内存限制限制,这无法完成。 (我用从互联网上读取的文件构建了一个数据结构并尝试推送到数据库)
我正在使用一个 rake 任务,它会提取和解析几个大文件,然后填充数据库。
作为一种解决方法,我现在在我的本地机器上运行这个 rake 任务并将数据库推送到 S3 并从我的本地机器发出一个 heroku 命令来恢复 heroku 数据库实例。
"heroku pgbackups:restore 'http://s3.amazonaws.com/#{yourfilepath}' --app #{APP_NAME} --confirm #{APP_NAME}"
您可以使用雾库推送到 S3
require 'rubygems'
require 'fog'
connection = Fog::Storage.new(
:provider => 'AWS',
:aws_secret_access_key => "#{YOUR_SECRECT}",
:aws_access_key_id => "#{YOUR_ACCESS_KEY}"
)
directory = connection.directories.get("#{YOUR_BACKUP_DIRECTORY}")
# upload the file
file = directory.files.create(
:key => '#{REMOTE_FILE_NAME}',
:body => File.open("#{LOCAL_BACKUP_FILE_PATH}"),
:public => true
)
我用来在本地机器上进行 pgbackup 的命令是
system "PGPASSWORD=#{YOUR_DB_PASSWORD} pg_dump -Fc --no-acl --no-owner -h localhost -U #{YOUR_DB_USER_NAME} #{YOUR_DB_DATABSE_NAME} > #{LOCAL_BACKUP_FILE_PATH}"
我已经放置了一个 rake 任务,可以自动执行所有这些步骤。
之后你可能会尝试使用 worker(DelayedJob)。我想您可以将您的工作人员配置为每 24 小时运行一次。我认为工人没有 30 秒的限制。但我不确定内存使用情况。