Hi. I''m using a migration to extract data from one table, to another.
In
the process I also convert ip-adresses to integers, for insertion in the
new table.
Problem is that migrations doesn''t seem to handle large numbers very
well. The conversion works fine from the script/console, but when
running it from migrations only very low IP-ranges "make it thru".
Integer-based IPs seem to be capped around 2150000000.
def self.up
require ''ipaddr''
@ips = GeoIpDatabase.find(:all)
@ips.each do |ip|
start_ip = IPAddr.new(ip.start_ip)
end_ip = IPAddr.new(ip.end_ip)
new_ip = Ip.new( :start_ip => start_ip.to_s, :end_ip =>
end_ip.to_s, :start_ip_integer => start_ip.to_i, :end_ip_integer =>
end_ip.to_i )
new_ip.save
end
end
I''m using MySQL, with the integer-columns migrated as, yes, integers ;)
Anyone know of a workaround?
Thanks!
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Gu stav wrote:> I''m using MySQL, with the integer-columns migrated as, yes, integers ;) > Anyone know of a workaround?You are probably running into the limitation of the integer type of the database. Try storing them as strings instead of integers and use the model to generate integers from them when you need them. That is, have db attributes :start_ip_intstring and :end_ip_intstring (say) and virtual attributes :start_ip_integer and :end_ip_integer which do the conversion. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> You are probably running into the limitation of the integer type of the > database. Try storing them as strings instead of integers and use the > model to generate integers from them when you need them. That is, have > db attributes :start_ip_intstring and :end_ip_intstring (say) and > virtual attributes :start_ip_integer and :end_ip_integer which do the > conversion.Problem is that I''m performing math stuff on them to see if an IP-adress is in the range in between: Ip.find(:all, :conditions => ["start_ip_integer <= ? AND end_ip_integer>= ?", @request_ip, @request_ip])So converting them one by one would be painfully slow i suppose? Specially since I have about 1 million ranges ;) The problem seems to be corrected when I change the int column to bigint in the MySQL table. However, I don''t know if I can set it to bigint in the migrations directly. Can I? -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Problem solved, simply by changin :integer to :bigint in the migrations. Thanks! -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---