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

发布于 2025-01-04 04:10:12 字数 197 浏览 1 评论 0原文

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

我想使用它从开发计算机上的文件导入数据,而无需将文件签入存储库。有没有办法通过 rake 任务或 heroku gem 来做到这一点?

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

有什么简单的方法可以做到这一点吗?

I have an import utility I'd like to use for creating records on heroku.

I want to use that to import data from a file on my development machine without having to check the file into the repository. Is there a way to do this with a rake task or the heroku gem?

I could upload the file in a web form which could time out, or I could store the file on S3, but that seems rather excessive.

Any easy way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

末骤雨初歇 2025-01-11 04:10:12

您可以从机器上的标准读取。

heroku run rake whatever <./file

You can read from standard in on your machine.

heroku run rake whatever <./file
惯饮孤独 2025-01-11 04:10:12

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

例如,如果您正在加载 yaml 文件:

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

I have found a really simple approach to this is to use gist for input data. You copy and paste your data into a gist and then pass the link to the raw gist as a param to your rake task. Then in the rake task you open the remote file.

For example, if you are loading a yaml file:

YAML.parse(open(file_name)).to_ruby.with_indifferent_access
失而复得 2025-01-11 04:10:12

不,不可能从使用 heroku run 运行的任何程序(其中包括 rake 任务,假设您使用的是 cedar)访问开发计算机上的本地文件。

我采取了以下方法:

  • 种子数据存储在存储库中并使用seed_fu加载

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

No, it's not possible to access local files on your development machine from anything run with heroku run (which includes rake tasks, assuming you're on cedar).

I've taken the following approach:

  • seed data is stored in the repo and loaded using seed_fu

  • Non-seed data is uploaded to S3 via a web form, and linked to a DataFile model using paperclip (a little overkill, but I was using it for images elsewhere). I can then use rake tasks or delayed job workers to process the files. It's definitely a bit of overhead.

雪化雨蝶 2025-01-11 04:10:12

您可以从 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 配置变量。

You can connect to the heroku database from inside a rake task.

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

Then from your local project root, you can run:

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

You just need to change my_app to the name of your app, and you may also need to change DATABASE_URL to match the name of your database url config var from Heroku.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文