This is a nasty and naughty hack, and one I’m abashedly apologetic for.
I was doing some work on a personal project recently, and wanted to pull some data out of the live database. I only needed a few columns from a couple of tables, so it didn’t seem to warrant a SQL dump.
I decided to format the records as JSON data, and copy/paste them from the console directly. But it turned out the length of the JSON data was longer than the backtrace in my terminal window, so I wasn’t able to see it all at once to select, copy, and paste.
Instead, I decided to save the data in a temporary file, and then email it to myself—using a temporary, memory-only mailer object.
Since this code was only held in memory during my rails console session, it disappeared as soon as I exited the session.
Here’s the code I used to do that:
array = # ... get all of the data that I need from the DB # Create the Tempfile object tempfile = Tempfile.new("my-data") # Write the data to the tempfile as JSON tempfile.write(array.to_json) # Subclass ApplicationMailer in memory class DynamicMailer < ApplicationMailer # Define a mailer method to send myself the file we just created def send_attachment(tempfile) attachments['attached.json'] = File.read(tempfile.path) mail(to: '[email protected]', body: "", subject: "Incoming...") end end # Send the email DynamicMailer.send_attachment(tempfile).deliver_now # Clean up the Tempfile afterwards tempfile.close tempfile.unlink
Hopefully the annotations in the code example make sense.
- I pulled the data that I wanted from the database in an Array of Hashes
- I created a Tempfile to store the data in
- I wrote the data to the Tempfile in the JSON format
- I created a new Mailer class in memory with one method for sending attached files
- I sent myself the Tempfile full of JSON
- I cleaned up the Tempfile afterwards.
I don’t advise that you ever use this horrible little hack for anything, on any project, ever.