Hi folks!  Can someone help me find the problem with my migration,
below?  It's working fine on my local environment, but when I run it
in Heroku I get 'an instance of IO needed' error.  I shouldn't need an
IO instance since I'm passing a string to the method--or at least
that's the intent.  The intent of the code is to read from the
database a serialized instance of a Grid, deserialize the object,
create a StaggeredGrid based on the contents, then serialize the new
object.  I can't do this directly at the ActiveRecord level because
the active record object that owns the grid is expecting a
StaggeredGrid and fails validation.

Any ideas?  Thanks in advance!

=== migration file:

# This seems to be required for YAML::load since the Grid class is
never
# directly invoked
require 'lib/grid'
require 'lib/staggered_grid'

class GridToStaggeredGrid < ActiveRecord::Migration
  def self.up
    say_with_time "Changing existing grids to staggered grids..." do
      suppress_messages do
        grids = execute "SELECT id, grid FROM grids"
        grids.each do |grid|
          old_grid = YAML::load(grid[1])
          new_grid = StaggeredGrid.new old_grid.row_count,
old_grid.column_count
          old_grid.each_with_coordinates do | cell, row, column |
            new_grid[row][column] = cell
          end
          result = execute "UPDATE challenges SET grid =
'#{YAML::dump(new_grid)}' WHERE id = #{grid[0]}"
        end
      end
    end
  end

  def self.down
    say_with_time "Changing existing staggered grids back to grids..."
do
      suppress_messages do
        grids = execute "SELECT id, grid FROM grids"
        grids.each do |grid|
          old_grid = YAML::load grid[1]
          new_grid = Grid.new old_grid.row_count,
old_grid.column_count
          old_grid.each_with_coordinates do | cell, row, column |
            new_grid[row][column] = cell
          end
          result = execute "UPDATE challenges SET grid =
'#{YAML::dump(new_grid)}' WHERE id = #{grid[0]}"
        end
      end
    end
  end
end

-- 
You received this message because you are subscribed to the Google Groups 
"Heroku" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/heroku?hl=en.

Reply via email to