我有一个导入实用程序,我想用于在heroku上创建记录。
我想用它从我的开发机器上的文件导入数据,而不必将文件检入存储库。有没有办法用rake任务或heroku gem来做到这一点?
我可以将文件上传到可能超时的网络表单中,或者我可以将文件存储在S3上,但这似乎相当过分。
有什么简单的方法吗?
您可以在机器上阅读标准输入。
heroku run rake whatever <./file
不,使用heroku run
(包括rake任务,假设你在雪松上)运行的任何东西都无法访问开发机器上的本地文件。
我采取了以下方法:
DataFile
模型(有点矫枉过正,但我在其他地方用于图像)。然后我可以使用rake任务或延迟的作业工人来处理文件。这绝对是一个开销。我发现一个非常简单的方法是使用gist输入数据。您将数据复制并粘贴到gist中,然后将链接作为rake任务的参数传递给raw gist。然后在rake任务中打开远程文件。
例如,如果要加载yaml文件:
YAML.parse(open(file_name)).to_ruby.with_indifferent_access
您可以从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的名称。