[Facebooker-talk] Overriding id with facebook_id???

Joseph Durden josephdurden at gmail.com
Tue Nov 11 17:51:52 EST 2008


Mike, you said specifying :limit =>21 should allow support for 64 bit
integers?  this did not work in rails 2.1.2, as i had to do the following to
get a mysql bigint(20) to work in my users table:

t.column :facebook_id, 'bigint', :null => false

Upon running a migration, I get a successful bigint(20) column in my mysql
database.  with :limit =>21, i was getting an integer column in mysql.

I was required to have a bigint column when using facebooker_authentication
and integrating with Bebo.  I was receiving duplicate key errors within
facebooker_authentication model.rb file in the following method:

      def for_facebook_id(facebook_id,facebook_session=nil)
            returning find_or_create_by_facebook_id(facebook_id) do |user|
                unless facebook_session.nil?
                    user.store_session(facebook_session.session_key)
                end
            end
        end

I was getting a Mysql::Error: duplicate key entry on returning
find_or_create_by_facebook_id(facebook_id) when integrating with Bebo.
After changing the column in mysql to bigint, everything is now working as
expected.

Would you recommend against setting 'bigint' directly in the migration file,
and if so, what would you suggest, and is bigint(20) enough, or should it be
bigint(64)?

Joe

On Tue, Nov 11, 2008 at 10:16 AM, Mike Mangino
<mmangino at elevatedrails.com>wrote:

>
> On Nov 11, 2008, at 1:08 PM, Lee Mallabone wrote:
>
>  2008/11/11 Joseph Durden <josephdurden at gmail.com>:
>>
>>> I am new to rails, and was wondering if there would be unknown
>>> consequences
>>> for setting the user tables primary key to being the facebook_id of a
>>> user.
>>> I have implemented this funcionality, and everything is working fine.
>>>  All
>>> associations etc.  What are the risks if there are any of overridding the
>>> id
>>> with facebook_id?  Why would I not want to do this?
>>>
>>
>> I'm doing this at the moment. The biggest thing I was concerned about
>> was the potential for facebook user IDs to be 64bit numbers. (I can't
>> remember the official Facebook stance on ID size but I'm pretty sure
>> they weren't ruling out 64bit IDs). Rails migrations don't seem to
>> support 64bit values (on mysql at least) out-of-the-box.
>>
>> I worked around the issue by patching ActiveRecord. I added a snippet
>> (attached) to environment.rb based on the following post and all seems
>> fine to date:
>> http://snippets.dzone.com/posts/show/4422
>>
>> Use column type :int64_pk for your users table and :int64 for any
>> foreign key columns.
>>
>>
> For Mysql, just use :integer, :limit=>21
>
> That forces the use of bigints. Facebook is using 64bit user ids.
>
> Mike
>
>  Lee.
>>
>>
>>
>> --
>> Lee Mallabone.
>> Director, Crossbone Systems Ltd.
>>
>> http://www.crossbonesystems.com/
>> http://www.fonicmonkey.net/
>> http://CambridgeWebHeads.ning.com/
>>
>> <mysql-64bit-monkeypatch.rb>_______________________________________________
>> Facebooker-talk mailing list
>> Facebooker-talk at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/facebooker-talk
>>
>
> --
> Mike Mangino
> http://www.elevatedrails.com
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/facebooker-talk/attachments/20081111/10b137e0/attachment-0001.html>


More information about the Facebooker-talk mailing list