FWIW, I've narrowed it down to this code in ActiveRecord::Base#create
self.id = connection.insert(statement, "#{self.class.name} Create",
self.class.primary_key, self.id, self.class.sequence_name)
The call to insert is always returning 1 - at least in the successful case.
TBH, I'm not sure if this is jruby, activerecord-jdbc-adapter, or jdbc-postgres
that's behaving badly. I've been digging into activerecord-jdbc-adapter and
friends today to try and figure out what's happening in Connection#insert, but
wow that was a big can of worms that I was unable to fully grok in a single
afternoon.
Lance
On Feb 16, 2012, at 10:10 AM, Lance Ball wrote:
> I have run into this issue as well. I have not yet dug into a fix, but have
> been able to reproduce the problem with a simple script that uses
> activerecord 2.3.11 on jruby 1.6.5.
>
> Here is the source:
> https://github.com/lance/pk_sequence_test
>
> Here is the output:
> $ bundle exec pk_sequence_test.rb
> -- create_table(:pk_tests, {:force=>true})
> -> 0.1440s
> -> 0 rows
> -- initialize_schema_migrations_table()
> -> 0.0030s
> -- assume_migrated_upto_version(0, "db/migrate")
> -> 0.0030s
> #<PkTest id: 1, name: "foo">
> #<PkTest id: 1, name: "bar">
> #<PkTest id: 1, name: "foobar">
> #<PkTest id: 1, name: "barfoo">
>
> Here is my environment.
> $ gem list
>
> *** LOCAL GEMS ***
>
> activerecord (2.3.11)
> activerecord-jdbc-adapter (1.2.2)
> activesupport (2.3.11)
> bundler (1.0.22)
> jdbc-postgres (9.1.901)
> pg (0.13.1)
>
> $ rvm info
>
> jruby-1.6.5@arjdbc:
>
> system:
> uname: "Darwin Neptune.local 11.3.0 Darwin Kernel Version 11.3.0:
> Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64"
> bash: "/bin/bash => GNU bash, version 3.2.48(1)-release
> (x86_64-apple-darwin11)"
> zsh: "/bin/zsh => zsh 4.3.11 (i386-apple-darwin11.0)"
>
> rvm:
> version: "rvm 1.9.2 by Wayne E. Seguin ([email protected])
> [https://rvm.beginrescueend.com/]"
>
> ruby:
> interpreter: "jruby"
> version: "1.6.5"
> date: "2011-10-25"
> platform: "darwin-x86_64-java"
> patchlevel: "TM"
> full_version: "jruby 1.6.5 (ruby-1.8.7-p330) (2011-10-25 9dcd388) (Java
> HotSpot(TM) 64-Bit Server VM 1.6.0_29) [darwin-x86_64-java]"
>
> homes:
> gem: "/Users/lanceball/.rvm/gems/jruby-1.6.5@arjdbc"
> ruby: "/Users/lanceball/.rvm/rubies/jruby-1.6.5"
>
> binaries:
> ruby: "/Users/lanceball/.rvm/rubies/jruby-1.6.5/bin/ruby"
> irb: "/Users/lanceball/.rvm/rubies/jruby-1.6.5/bin/irb"
> gem: "/Users/lanceball/.rvm/rubies/jruby-1.6.5/bin/gem"
> rake: "/Users/lanceball/.rvm/rubies/jruby-1.6.5/bin/rake"
>
> environment:
> PATH:
> "/Users/lanceball/.rvm/gems/jruby-1.6.5@arjdbc/bin:/Users/lanceball/.rvm/gems/jruby-1.6.5@global/bin:/Users/lanceball/.rvm/rubies/jruby-1.6.5/bin:/Users/lanceball/.rvm/bin:/Users/lanceball/bin:/Developer/usr/bin:/Users/lanceball/local/node/bin:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/local/sbin:/usr/local/PostgreSQL/9.0/bin:/opt/local/ImageMagick-6.6.9/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/usr/local/MacGPG2/bin:/usr/local/git/bin"
> GEM_HOME: "/Users/lanceball/.rvm/gems/jruby-1.6.5@arjdbc"
> GEM_PATH:
> "/Users/lanceball/.rvm/gems/jruby-1.6.5@arjdbc:/Users/lanceball/.rvm/gems/jruby-1.6.5@global"
> MY_RUBY_HOME: "/Users/lanceball/.rvm/rubies/jruby-1.6.5"
> IRBRC: "/Users/lanceball/.rvm/rubies/jruby-1.6.5/.irbrc"
> RUBYOPT: ""
> gemset: "arjdbc"
>
>
>
>
>
> On Feb 15, 2012, at 2:26 AM, Charles Oliver Nutter wrote:
>
>> I will echo Nick's suggestion: reproduce in a simple script. If we can
>> narrow it down to a simple schema and script, the fix may be easy to
>> find.
>>
>> My money is on auto-generated ID not propagating back out properly during
>> #save.
>>
>> Feel free to open an AR-JDBC issue at this point:
>> https://github.com/jruby/activerecord-jdbc-adapter/issues
>>
>> - Charlie
>>
>> On Tue, Feb 14, 2012 at 4:33 PM, Vivek Pandey <[email protected]> wrote:
>>> that might be the case atleast from pure observation. My rubymine does not
>>> let me step inside ActiveRecord::Base.save() with jruby rack:( It does not
>>> look like anyone on this list has experienced this problem, that tells me
>>> maybe its some other dependencies or something else causing it. This is
>>> pretty basic stuff and should have worked. I will update you with my
>>> findings.
>>>
>>> vivek.
>>>
>>>
>>> On Tue, Feb 14, 2012 at 1:13 PM, Charles Oliver Nutter <[email protected]>
>>> wrote:
>>>>
>>>> Ahh, that's interesting. So perhaps there's something in save that
>>>> should be getting a generated ID and we're not doing that right?
>>>>
>>>> - Charlie
>>>>
>>>> On Tue, Feb 14, 2012 at 2:36 PM, Vivek Pandey <[email protected]>
>>>> wrote:
>>>>> Jruby rackup fails the same way, which is the persisted model object id
>>>>> is
>>>>> shown as 1 instead of its actual value. I ran it thru debugger and right
>>>>> after product.save(false) product.id gives 1 and if I do
>>>>> Product.find_by_name(), it gives me the just persisted object correctly.
>>>>>
>>>>> vivek.
>>>>>
>>>>>
>>>>> On Tue, Feb 14, 2012 at 8:30 AM, Nick Sieger <[email protected]>
>>>>> wrote:
>>>>>>
>>>>>> How about rackup on JRuby? Works or fails?
>>>>>>
>>>>>> /Nick
>>>>>>
>>>>>> On Tue, Feb 14, 2012 at 9:43 AM, Vivek Pandey <[email protected]>
>>>>>> wrote:
>>>>>>> Sorry, forgot to give my env. Running my env on rails is non-trivial
>>>>>>> at
>>>>>>> present. All I can tell is that when I run rackup with MRI it all
>>>>>>> works
>>>>>>> well
>>>>>>> but the same when warbled and deployed on tomcat, gives me the id of
>>>>>>> 1!
>>>>>>> Something must be silly going on here not sure what.
>>>>>>>
>>>>>>> thanks,
>>>>>>>
>>>>>>> vivek.
>>>>>>>
>>>>>>> JRuby 1.6.5 with JDK 1.6
>>>>>>>
>>>>>>> $ bundle show
>>>>>>>
>>>>>>> * activerecord (2.3.8)
>>>>>>> * activerecord-activesalesforce-adapter (2.3.6.1 40ab887)
>>>>>>> * activerecord-jdbc-adapter (1.2.2)
>>>>>>> * activerecord-jdbcpostgresql-adapter (1.2.2)
>>>>>>> * activesupport (2.3.8)
>>>>>>> * arel (2.2.1)
>>>>>>> * backports (2.3.0)
>>>>>>> * blankslate (2.1.2.4)
>>>>>>> * bouncy-castle-java (1.5.0146.1)
>>>>>>> * builder (3.0.0)
>>>>>>> * bundler (1.0.21)
>>>>>>> * eventmachine (0.12.10)
>>>>>>> * haml (3.1.4)
>>>>>>> * hashery (1.5.0)
>>>>>>> * hpricot (0.8.6)
>>>>>>> * httpclient (2.2.1)
>>>>>>> * i18n (0.6.0)
>>>>>>> * jdbc-postgres (9.1.901)
>>>>>>> * jruby-jars (1.6.6)
>>>>>>> * jruby-openssl (0.7.5)
>>>>>>> * jruby-rack (1.0.10)
>>>>>>> * json (1.4.6)
>>>>>>> * mail (2.4.1)
>>>>>>> * mime-types (1.17.2)
>>>>>>> * net-ldap (0.1.1)
>>>>>>> * nokogiri (1.5.0)
>>>>>>> * oauth (0.4.5)
>>>>>>> * polyglot (0.3.3)
>>>>>>> * pony (1.4)
>>>>>>> * rack (1.3.4)
>>>>>>> * rack-protection (1.2.0)
>>>>>>> * rack-test (0.6.1)
>>>>>>> * rake (0.9.2)
>>>>>>> * rest-client (1.6.0)
>>>>>>> * rjack-slf4j (1.5.10.0)
>>>>>>> * ruby-openid (2.1.8)
>>>>>>> * rubyzip (0.9.6.1)
>>>>>>> * sinatra (1.3.1)
>>>>>>> * sinatra-activerecord (0.1.3)
>>>>>>> * sinatra-contrib (1.3.1)
>>>>>>> * sinatra-reloader (1.0)
>>>>>>> * soap4r (1.5.8)
>>>>>>> * tilt (1.3.3)
>>>>>>> * treetop (1.4.10)
>>>>>>> * uuidtools (2.1.1)
>>>>>>> * warbler (1.3.2)
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Feb 14, 2012 at 6:53 AM, Charles Oliver Nutter
>>>>>>> <[email protected]>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Hi Vivek!
>>>>>>>>
>>>>>>>> On Tue, Feb 14, 2012 at 8:15 AM, Vivek Pandey
>>>>>>>> <[email protected]>
>>>>>>>> wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I am using JRuby with Sinatra and ActiveRecord as ORM. I have code
>>>>>>>>> such
>>>>>>>>> as
>>>>>>>>> this:
>>>>>>>>>
>>>>>>>>> ActiveRecord::Base.transaction do
>>>>>>>>> product.rollback_active_record_state! do
>>>>>>>>> if(product.save(false))
>>>>>>>>> logger.debug "Prod ID: #{product.id}"
>>>>>>>>> yield if block_given?
>>>>>>>>> end
>>>>>>>>> end
>>>>>>>>> end
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> When I execute rackup with MRI 1.8.7p 357, it prints valid Prod
>>>>>>>>> ID.
>>>>>>>>> However
>>>>>>>>> when I deploy the same using jruby-rack/warbler, It always prints
>>>>>>>>> 1
>>>>>>>>> as
>>>>>>>>> product id, however save is successful and persisted correctly in
>>>>>>>>> the
>>>>>>>>> DB.
>>>>>>>>> Its just that I get invalid product id, which is always 1. Anyone
>>>>>>>>> knows
>>>>>>>>> what
>>>>>>>>> might be going on here?
>>>>>>>>
>>>>>>>> I doubt jruby-rack has anything to do with it. Can you reproduce
>>>>>>>> with
>>>>>>>> "rails server"? What versions of everything?
>>>>>>>>
>>>>>>>> - Charlie
>>>>>>>>
>>>>>>>>
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe from this list, please visit:
>>>>>>>>
>>>>>>>> http://xircles.codehaus.org/manage_email
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe from this list, please visit:
>>>>>>
>>>>>> http://xircles.codehaus.org/manage_email
>>>>>>
>>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe from this list, please visit:
>>>>
>>>> http://xircles.codehaus.org/manage_email
>>>>
>>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe from this list, please visit:
>>
>> http://xircles.codehaus.org/manage_email
>>
>>
>
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email