-
Notifications
You must be signed in to change notification settings - Fork 83
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
undefined method `slice!' for nil:NilClass #27
Comments
This is commonly caused by concurrency issues. seek_record is safe, but are you sure you have a valid GeoIP instance? |
Concurrency as in inter-process? We use Unicorn and not using threads, FWIW. We've been using this gem for years and haven't had any errors. |
Oh, wait. The slice() you mention is in the IPv6 code, which is fairly new. What database file are you using? The file contains a binary search tree, where each bit of the IP address chooses one of two pointers from a node. The search is supposed to stop when a pointer points outside the tree data section. If this termination-test fails for some path down the tree (perhaps because the data size is wrong), the next node read may return nil and cause the exception in slice!. To debug it, you need (or I need) a copy of the database file, and the IP address which fails. We need to know what the start and end offsets are of the search tree in the file, and the offset and contents of the node which points outside the tree and hence causes the failed read. |
The failing IP address was The database file was downloaded from |
That file is not even an IPv6 data file, so the initialiser for GeoIP has failed to correctly read the file header and/or identify the file format version. I suspect perhaps an I/O error? How many times did the error occur? |
There's no other errors - this error occurred only once. As I said, we've been using the gem for years and haven't had any problems except this one. Here's the code we have in initializer: class GeoIP
DB = GeoIP.new(Rails.root.join('db/geoip/GeoLiteCity.dat'))
end and rails console: $ zeus console
Loading development environment (Rails 3.2.13)
[1] pry(main)> GeoIP::DB.city('166.137.186.47')
=> #<struct GeoIP::City
request="166.137.186.47",
ip="166.137.186.47",
country_code2="US",
country_code3="USA",
country_name="United States",
continent_code="NA",
region_name="CA",
city_name="Encinitas",
postal_code="",
latitude=33.037000000000006,
longitude=-117.292,
dma_code=825,
area_code=760,
timezone="America/Los_Angeles"> |
Put it down to a glitch in your I/O system. If it's not re-occuring, it's not a bug that can be fixed. |
I have this error on production:
I can't reproduce the same error with the same IP, so it seems to have something to do with its internal state? Not sure.
It is with Ruby 2.0.0p0.
The text was updated successfully, but these errors were encountered: