在heroku rake任务期间加载本地文件

问题描述 投票:9回答:4

我有一个导入实用程序,我想用于在heroku上创建记录。

我想用它从我的开发机器上的文件导入数据,而不必将文件检入存储库。有没有办法用rake任务或heroku gem来做到这一点?

我可以将文件上传到可能超时的网络表单中,或者我可以将文件存储在S3上,但这似乎相当过分。

有什么简单的方法吗?

heroku rake
4个回答
6
投票

您可以在机器上阅读标准输入。

heroku run rake whatever <./file

2
投票

不,使用heroku run(包括rake任务,假设你在雪松上)运行的任何东西都无法访问开发机器上的本地文件。

我采取了以下方法:

  • 种子数据存储在repo中并使用seed_fu加载
  • 非种子数据通过网络表单上传到S3,并使用回形针链接到DataFile模型(有点矫枉过正,但我​​在其他地方用于图像)。然后我可以使用rake任务或延迟的作业工人来处理文件。这绝对是一个开销。

2
投票

我发现一个非常简单的方法是使用gist输入数据。您将数据复制并粘贴到gist中,然后将链接作为rake任务的参数传递给raw gist。然后在rake任务中打开远程文件。

例如,如果要加载yaml文件:

YAML.parse(open(file_name)).to_ruby.with_indifferent_access

0
投票

您可以从rake任务中连接到heroku数据库。

namespace :data_loader do
  desc "loads data"
  task load_data: :environment do

    if ! ENV['DATABASE_URL'].nil?
      ActiveRecord::Base.establish_connection ENV['DATABASE_URL']
    end

    load_my_data( "/local/path/to/huge_file.txt" )

  end
end

然后从本地项目根目录运行:

DATABASE_URL=$(heroku config:get DATABASE_URL -a my_app) rake data_loader:load_data

您只需将my_app更改为您的应用程序名称,您可能还需要更改DATABASE_URL以匹配来自Heroku的数据库url config var的名称。

© www.soinside.com 2019 - 2024. All rights reserved.