Ruby gems fighting for two separate versions of activesupport? - ruby

I'm trying to run the resque server from the command line using:
rake resque:work
and ruby is complaining as follows:
Bundler could not find compatible versions for gem "activesupport":
In Gemfile:
daemon-kit (>= 0) ruby depends on
activesupport (< 3.2.0, >= 2.3.5) ruby
actionpack (>= 0) ruby depends on
activesupport (3.2.12)
How do I resolve these dependencies? Can I install two versions of activesupport in the same RVM gemset?

You'll need to downgrade your version of activesupport to a version that supports daemonkit - or look for an updated version of daemonkit. Your current version of rails / activesupport is newer than the version supported by your version of daemon-kit.
You can have multiple versions of activesupport in a single gemset, but only one of them can be activated at once.

Related

Why is bundler a dependency but not a spec in Gemfile.lock?

I'm parsing Gemfile.lock to create a dependency graph. A sample of the file:
rack-ssl (1.3.4)
rack
rack-test (0.6.3)
rack (>= 1.0)
rails (3.2.22.1)
actionmailer (= 3.2.22.1)
actionpack (= 3.2.22.1)
activerecord (= 3.2.22.1)
activeresource (= 3.2.22.1)
activesupport (= 3.2.22.1)
bundler (~> 1.0)
railties (= 3.2.22.1)
rack (1.4.7)
It is a list of specs (gems which need to be installed for this project), followed by an indented list of that spec's dependencies. Because every dependency needs to be installed, they are all listed as specs somewhere else in the file. (E.G. rack is listed as a spec in the bottom of the sample, but is a dependency for two other specs near the top)
The one exception to this rule is bundler, which is listed as a dependency but not as a spec. Why is this? Is it because gems already installed on a system level aren't included in the Gemfile.lock? Or is this a special case because bundler is the gem that generates Gemfiles, so it doesn't include itself?
If any of the needed gems are already installed, Bundler will use them. After installing any needed gems to your system, bundler writes a snapshot of all of the gems and versions that it installed to Gemfile.lock
https://bundler.io/rationale.html
It's bundler that creates Gemfile.lock and it's a list of all dependencies that are installed by bunler. As bundler does not install itself, it's not included. It makes it a special gem - the one that needs to be installed to bootstrap a ruby app.

Bundler could not find compatible versions for gem activesupport with specific versions

I am trying to do a bundle install but am getting the following error:
Bundler could not find compatible versions for gem "activesupport":
In Gemfile:
***private gem*** was resolved to 0.4.2, which depends on
activesupport (~> 5.0)
***private gem*** was resolved to 1.0, which depends on
activesupport (~> 4)
What does this mean?
I have searched through the internet and getting answers such as do a bundle update, or remove the Gemfile.lock, but none has been working for me.
I have also tried doing a gem install activesupport -v 4.0 and gem install activesupport -v 5.0
Thanks in advance

Bundler could not find compatible versions for gem "actionpack"

When I'm trying to bundle update i get this error:
Bundler could not find compatible versions for gem "actionpack":
In Gemfile:
actionpack (>= 4.2.5, ~> 4.2)
railties (>= 4.2.5, ~> 4.2) was resolved to 4.2.5, which depends on
actionpack (= 4.2.5)
railties (>= 4.2.5, ~> 4.2) was resolved to 4.2.5, which depends on
actionpack (= 4.2.5)
railties (>= 4.2.5, ~> 4.2) was resolved to 4.2.5, which depends on
actionpack (= 4.2.5)
strong_parameters (~> 0.2.3) was resolved to 0.2.3, which depends on
actionpack (~> 3.0)
This problem can arise if you update the Rails version (for example from 4 to 5), and you have included certain gems locked to a specific version which still depend on an old ActionPack version from the old Rails version. Then bundler says..
Bundler could not find compatible versions for gem "actionpack"
..because the new rails version wants to use the new ActionPack gem, but one of the gems wants to use the old ActionPack gem.
You should've include the Gemfile in the question.
Anyway, in Rails 4.x strong_parameters gem is not required. If you have that in your gemfile, remove it and try again.
You don't need the strong_parameters gem. Strong parameters is part of rails 4, the gem allows that feature to be backported to rails 3.x
This is partly to help rails 3.x users to migrate to rails 4 and I think it may have been used earlier to prototype how strong parameters should work (by allowing people to use it without switching to rails edge)

Error while installing spree

Bundler could not find compatible versions for gem "railties":
In Gemfile:
rails (= 3.2.8) ruby depends on
railties (= 3.2.8) ruby
sass-rails (~> 4.0.0) ruby depends on
railties (4.0.0)
This error occured, how can i fix this error.
I do not know railties and sass-rails version.
If you're using Rails 3.2 you should use all gems with that branch too, i.e.:
Gemfile:
gem https://github.com/rails/sass-rails.git, branch: '3-2-stable'
You can see branches listed on GH next to green compare button (with new layout).
What if specific gem doesn't have branches? Well, you can fork it, modify the gemspec,see what fails and fix it.

Mongoid/activesupport version problem

I'm attempting to use Mongoid from a plain Ruby script (not via Rails or any other framework) and I think I'm running into some version dependency conflicts:
/opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:779:in `report_activate_error': RubyGem version error: activesupport(3.0.0 not >= 2.2.2, < 3.0.pre) (Gem::LoadError)
from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:214:in `activate'
from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:1082:in `gem'
from /opt/local/lib/ruby/gems/1.8/gems/mongoid-1.9.1/lib/mongoid.rb:24
from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from ./rubymongo.rb:4
My local Rails has been upgraded to 3.0.0 already, and if I read the error correctly, somewhere there's a requirement saying activesupport has to be < 3.0.pre, and 3.0.0 is too new?
Is this because Rails 3.0 is brand new and maybe Mongoid has a config option somewhere with 3.0.pre defined that I need to upgrade? Where would I do that?
I used to have the old Rails still installed too, but got a different error:
/opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:233:in `activate': can't activate activesupport (>= 2.2.2, < 3.0.pre, runtime) for [], already activated activesupport-3.0.0 for ["mongoid-1.9.1"] (Gem::LoadError)
from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:1082:in `gem'
from /opt/local/lib/ruby/gems/1.8/gems/mongoid-1.9.1/lib/mongoid.rb:24
from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from ./rubymongo.rb:4
If I go back to having an older activesupport installed, how do I make sure the newer one isn't being hit as well?
I'm still very new to Ruby, so please elaborate in your answer.
After upgrading to the Mongoid 2.0 beta per Simon's suggestion, I'm getting a new conflict about bson being too new:
/opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:233:in `activate': can't activate bson (= 1.0.4, runtime) for ["mongoid-2.0.0.beta.17"], already activated bson-1.0.7 for ["mongo-1.0.7", "mongoid-2.0.0.beta.17"] (Gem::LoadError)
from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:249:in `activate'
from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:248:in `each'
from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:248:in `activate'
from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:35:in `require'
from ./rubymongo.rb:4
Why is bson 1.0.4 already loaded? Is something else trying to load it explicitly? All my simple .rb script requires is rubygems and mongoid at this point.
Here's all the gems I use that sound relevant:
actionpack (3.0.0, 2.3.8)
activemodel (3.0.0)
activerecord (3.0.0)
activeresource (3.0.0)
activesupport (3.0.0)
bson (1.0.7, 1.0.4)
bson_ext (1.0.7)
mongo (1.0.8, 1.0.7)
mongo_ext (0.19.3)
mongoid (2.0.0.beta.17)
rails (3.0.0, 2.3.8)
I think I came across the same problem. It does seem to be caused by a dependency clash. mongo 1.0.8 will pull in bson 1.0.7 but mongoid depends on bson 1.0.4 which leads to the clash. I think it all comes down to the very specific dependencies that the mongoid beta has.
I managed to get this combination of gems working together:
activemodel (3.0.0)
activesupport (3.0.0)
rails (3.0.0)
mongo (1.0.7)
mongoid (2.0.0.beta.18)
bson (1.0.4)
This meant that I had to explicitly install mongo 1.0.7 and bson 1.0.4 and uninstall the latest versions (mongo 1.0.8 and bson 1.0.7). I was then able to run a simple script.
Indeed there's a Gem version conflict.
There are two versions of mongoid available right now:
* 1.9.1 stable
* 2.0.0 beta
Both should work well with Rails 3. Even mongoid 1.9.1, which is a little bit more old, depends on activesupport <= 3.0.0 which means Rails 3 is a valid dependency.
Perhaps, you're still working with Rails 3 RC.
I suggest you to:
Make sure you changed your Gemfile to use Rails 3, regenerated your Gemfile.lock and reinstalled the dependencies
gem "rails", 3.0.0"
$ bundle update
$ bundle install
If the problem persist, try upgrading to mongoid 2.0.0 beta.

Resources