定期从Heroku上的文件导入数据

时间:2011-06-02 13:03:55

标签: import cron heroku

我需要定期将一些数据导入到Heroku的rails应用程序中。

要执行的任务分为以下几部分:  *从网站下载一个大的zip文件(例如~100mb)  *解压缩文件(解压缩空间约为1.50gb)  *运行一个rake脚本,该脚本读取这些文件并使用我的活动记录模型创建或更新记录  *清理

我如何在heroku上执行此操作?是否更好地使用一些外部存储(例如S3)。 你会怎么做这样的事情?

理想情况下,这需要每晚运行。

1 个答案:

答案 0 :(得分:1)

我几天前已经尝试了完全相同的事情,而我得出的结论是因为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秒的限制。但我不确定内存使用情况。