Cucumber doesn't work but rake cucumber does - ruby-on-rails

Jonathans-MacBook-Air-2:hw3-rottenpotatoes Jonathan$ cucumber
WARN: Unresolved specs during Gem::Specification.reset:
tzinfo (~> 0.3.37)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.
You have already activated activesupport 4.0.0, but your Gemfile requires activesupport 3.2.14. Using bundle exec may solve this. (Gem::LoadError)
/Users/Jonathan/.rvm/gems/ruby-1.9.3-p448/gems/bundler-1.3.5/lib/bundler/runtime.rb:33:in `block in setup'
/Users/Jonathan/.rvm/gems/ruby-1.9.3-p448/gems/bundler-1.3.5/lib/bundler/runtime.rb:19:in `setup'
/Users/Jonathan/.rvm/gems/ruby-1.9.3-p448/gems/bundler-1.3.5/lib/bundler.rb:120:in `setup'
/Users/Jonathan/.rvm/gems/ruby-1.9.3-p448/gems/bundler-1.3.5/lib/bundler/setup.rb:7:in `'
But it seems like I have the right rails version in this directory.
Jonathans-MacBook-Air-2:hw3-rottenpotatoes Jonathan$ rails --version
Rails 3.2.14
I'm kind of new to ruby and am confused as to why "rake cucumber" works but "cucumber" doesn't in the terminal.
I don't know how ruby and gems are set up but I have a hunch is that somehow in my working directory, ruby is told to use rails 3.2.14 but the command "cucumber" is only detecting activtesupport 4.0.0 (which I believe is tied to rails)
Thanks so much!

cucumber is a binstub, while rake cucumber is a rake task that executes the library.
Try bundle install -—binstubs first, then try cucumber.
Perhaps the binstub is somehow out of date?
If that doesn't work, just kill the binstubs by deleting the project/bin dir, and rerun bundle install -—binstubs

You have multiple versions of Rails installed and cucumber doesn't know which to use, so it's trying to load both and erroring out.
To use the one specified in your Gemfile, specify bundle exec before all commands, eg. bundle exec cucumber.

Related

Can't find old RSpec version after switching from RVM to rbenv

A couple of days ago I switched from RVM to rbenv. I now have issues with rspec for a rails project. I'm getting this message:
You have already activated rspec-core 3.0.3, but your Gemfile requires rspec-core 2.14.8.
I tried to do:
gem install rspec-core '2.14.8'
but then I got this error message:
ERROR: Could not find a valid gem '2.14.8' (>= 0) in any repository
after which rbenv just uses RSpec 3.0.3.
So the only way now to run the test in my Rails project is to use:
bundle exec rspec spec
Is there a way to install a pre-RSpec 3 version of RSpec beside the installed RSpec 3.0.3 so I can again run the test in my Rails project by just typing:
rspec spec
I'm using Rails 4.1.1.
The Rails 4 way to run things under bundler and spring is to run scripts in the bin directory. To generate such a script for rspec, install the spring-commands-rspec gem and run bundle exec spring binstub --all. If your current directory is the root of your rails project, you can then just type bin/rspec.
Side note: RSpec runs the spec directory by default, so you don't need to type spec.
To save typing bin/, either add your Rails project's bin directory to your PATH in the usual way or use direnv.
You probably want rspec-rails, not just RSpec. If so, since you're using Rails 4.1.x, you'll need rspec-rails 2.99, which needs rspec 2.99.x, not 2.14.x. (Documented in rspec-rails' Changelog.)

Rails: You have already activated rake 10.3.1, but your Gemfile requires rake 10.2.2 (Gem::LoadError)

Here is my error:
rake aborted!
Gem::LoadError: You have already activated rake 10.3.1, but your Gemfile requires rake 10.2.2. Prepending `bundle exec` to your command may solve this.
/Users/AaronWilliamson/.gem/ruby/2.1.0/gems/bundler-1.5.3/lib/bundler/runtime.rb:34:in `block in setup'
/Users/AaronWilliamson/.gem/ruby/2.1.0/gems/bundler-1.5.3/lib/bundler/runtime.rb:19:in `setup'
/Users/AaronWilliamson/.gem/ruby/2.1.0/gems/bundler-1.5.3/lib/bundler.rb:119:in `setup'
/Users/AaronWilliamson/.gem/ruby/2.1.0/gems/bundler-1.5.3/lib/bundler/setup.rb:7:in `<top (required)>'
/Users/AaronWilliamson/Desktop/Ripelist-Classifieds/config/boot.rb:4:in `<top (required)>'
/Users/AaronWilliamson/Desktop/Ripelist-Classifieds/config/application.rb:1:in `<top (required)>'
/Users/AaronWilliamson/Desktop/Ripelist-Classifieds/Rakefile:4:in `<top (required)>'
LoadError: cannot load such file -- bundler/setup
/Users/AaronWilliamson/Desktop/Ripelist-Classifieds/config/boot.rb:4:in `<top (required)>'
/Users/AaronWilliamson/Desktop/Ripelist-Classifieds/config/application.rb:1:in `<top (required)>'
/Users/AaronWilliamson/Desktop/Ripelist-Classifieds/Rakefile:4:in `<top (required)>'
(See full trace by running task with --trace)
I can't run any rake tasks and this seems to be the root of all my other problems. It wasn't like this a couple days ago when I was running rake commands. Can anyone explain what's going on here and how to get my app back on track? I've hit a wall. Also, bundle exec doesn't fix the root of the problem for me. I never had to do that in the past and it's still not working now.
EDIT 2:
You should look at bundle update and change your workflow a little. Refer to this question for further assistance.
Original answer
This is a simple issue which happens when your gemset has a rake version that is newer than the version number your Gemfile.lock mentions.
As is mentioned in the error message, you can use bundle exec to get things working.
My solution in such cases is to just remove Gemfile.lock if I am not too worried other gem versions and their endless dependencies. Otherwise, you can try just removing the one line in Gemfile.lock which talks about the version of rake. run bundle install and the world should be a happy place again. (edit 2: Run bundle update --source instead of this. Don't do this.)
PS: Try using gemsets and organising your gems with rvm for different projects.
Edit
I prefer using rbenv now for managing installations and all gems for a project reside in vendor/bundle using bundle install --path option. Later scope every gem command with bundle exec.
Hence, rails s becomes bundle exec rails s. A little more typing is, in my opinion, better if it means that things will remain clean and conflicts such as this one don't happen.
A simple solution that worked for me is to simply run bundle update rake.
You can use rubygems-bundler to solve this. Run the following commands:
$ gem install rubygems-bundler
$ gem regenerate_binstubs
Then try your rake again.
I had a similar issue and I was skeptical about removing a line from my Gemfile.lock, it seemed hacky and the inconvenience of prepend bundle exec to every rake command was not an option either. I fixed this by first going into my Gemfile.lock to see what version of rake was there (in my case it was 11.1.2). My thought was to uninstall rake and install this version. Running gem uninstall rake gave this output:
Select gem to uninstall:
rake-10.5.0
rake-11.1.1
rake-11.1.2
rake-11.2.2
rake-11.3.0
All versions
I uninstalled both rake-11.2.2 and rake-11.3.0. That fixed my problem
Use this:
gem install rake -v "version-you-want"
My error message:
~ $ rake db:migrate [2.6.5][10:21:00]
rake aborted!
Gem::LoadError: You have already activated rake 12.3.2, but your Gemfile requires rake 13.0.1. Prepending `bundle exec` to your command may solve this.
/Users/torvalds/workspace/ekohe/whitespace/config/boot.rb:5:in `<top (required)>'
/Users/torvalds/workspace/ekohe/whitespace/config/application.rb:3:in `require_relative'
/Users/torvalds/workspace/ekohe/whitespace/config/application.rb:3:in `<top (required)>'
/Users/torvalds/workspace/ekohe/whitespace/Rakefile:6:in `require_relative'
/Users/torvalds/workspace/ekohe/whitespace/Rakefile:6:in `<top (required)>'
(See full trace by running task with --trace)
I am using the rbenv to manage my Ruby environment.
My global Ruby version is as know as the default Ruby version is 2.7.1, because I set it as rbenv global 2.7.1. However, my rake under Ruby 2.7.1 is 12.3.2
~ $ rake --version
rake, version 12.3.2
My project Ruby version is 2.6.5. however, my rake under Ruby 2.6.5 in my project is 13.0.1
~ $ bundle exec rake --version
rake, version 13.0.1
so I have to uninstall global rake
~ $ gem uninstall rake
and reinstall it back
~ $ gem install rake
Fetching rake-13.0.1.gem
Successfully installed rake-13.0.1
1 gem installed
it works! ~~~
I'm not sure whether it will have an influence on other projects. However, so far it works.
According to this solution (that worked for me) : https://stackoverflow.com/a/23668399/4260090
You can solve it by using rubygems-bundler
Type these commands in your terminal :
$ gem install rubygems-bundler
$ gem regenerate_binstubs
It should work now
Try to install nodejs, this was solved my problem.
If you're on ubuntu run this command.
sudo apt-get install nodejs
I tried another way which is delete Gemfile.lock then run bundle install. After that I run rake db:migrate. And everything works fine.
Although I don't think remove Gemfile.lock is bad practice, but may be; who know.
As mentioned on earlier answers this is a simple issue which happens when your gemset has a rake version that is newer than the version number your Gemfile.lock mentions.
The easiest way to debug this is to run bundle update.
The other ways could be to remove Gemfile.lock and running bundle install or simply deleting the line in Gemfile.lock that corresponds to the rake version and try bundle install. But this might sometimes corrupt the Gemfile. I would prefer the first method because it is the safest and the easiest.
Go in the Gemfile.lock, find the rake file and update the version there.
I got this error:
Gem::LoadError: You have already activated rake 11.2.2, but your
Gemfile requires rake 11.1.2. Prepending bundle exec to your command
may solve this.
What I did was to change the version of rake in the Gemfile.lock from:
rake (11.1.2) to rake (11.2.2).
Everything worked fine after that.
I had the same error:
You have already activated rake 12.0.0, but your Gemfile requires rake 11.3.0. Prepending "bundle exec" to your command may solve this.
I solved it by running bundle update
this updated the rake version to my activated rake version and everything worked I hope that works for you!
I meet the similar problem.
My solution is change the line of rake version "gem 'rake', '~> 10.3'" in file Gemfile, delete Gemfile.lock and run 'bundler install', the new Gemfile.lock will show the new version 10.3.1. Then everything will be fine.
I have fixed by simply prepending bundle exec as
"bundle exec rake db:create" or migrate
I experienced this issue:
Here's my solution:
Solution 1:
This solution works a lot of the time, simply update the gem causing the issue, say the gem is rack
bundle update rack
Solution 2:
In some cases Solution 1 may not work, and you will need to edit your Gemfile.lock file.
Simply, open your Gemfile.lock file and then change the version to the update requested.
In my case, the gem was rack, I had rack 2.0.7 defined in my Gemfile.lock file, but my application required rack 2.1.2, I simply had to modify it to rack 2.1.2 in the Gemfile.lock file.
I then had to uninstall the previous version of rack which is rack 2.0.7
gem uninstall rack -v 2.0.7
And finally installed the new gem in production
bundle install --without development test
Solution 3:
In very rare cases Solution 1 and Solution 2 may not work, and you will need to edit your Gemfile before updating the gem.
In my case, the gem was puma, I had puma ~> 3.11 defined in my Gemfile, but my application required puma ~> 4.3.1. At this point running bundle update puma and editing my Gemfile.lock file didn't work, since puma ~> 3.11 version specified in the Gemfile would not allow an update to puma ~> 4.3.1.
I simply had to change the version of puma in the Gemfile to puma ~> 4.3.1 and then ran the command.
bundle update puma
Solution 4:
If the version of rake that your Gemfile requires is less than the rake version activated, and you do not want to update rake, then you can as well run the command below to remove the version of rake that is activated:
gem list rake
gem uninstall rake
and then select the version of rake you want to uninstall.
That's all.
I hope this helps

How to run a specific version of rake

Background:
I get errors whenever I run rake in an older project. (uninitialized constant Rake::DSL).
The rails project in question is an old project that was started with Rails 2.1 (I think), and since then I've updated the OS on my laptop a couple of times, and made updates along the way to make it run.
Right now, the rails app works fine, provided I have RAILS_GEM_VERSION set to 2.3.5. I'm not sure if the app was completely updated to Rails 2.3.5.
There is no Gemfile in my older project.
If I create a brand-new rails project (and unset RAILS_GEM_VERSION), rake runs fine.
My question: To troubleshoot, I'd like to try newer versions of rake. I'd like to know how to force one specific version to be used, since it appears I have multiple versions installed.
Info on my environment:
$ gem list rake
*** LOCAL GEMS ***
rake (0.9.2.2, 0.9.2, 0.8.7, 0.8.3)
$ rake --version
rake, version 0.8.7
So it looks like it's picking up the 0.8.7 version.
All the help files online seem to tell me to specify the rake version in the Gemfile, but there isn't one in this project. (Maybe it predates gemfiles?)
If I unset the RAILS_GEM_ENVIRONMENT variable altogether, and try to run rake, I get:
rake aborted!
can't activate rails (= 2.3.5, runtime) for [], already activated rails-3.2.8 for []
None of the environment config files in my older project set that variable either.
This may be of help. Have you tried the underscore solution?
Example:
rake _0.9.2_
you can run rake specific version by using this
bundle exec rake ...
more detail see this - bundle exec, rake
You can uninstall the current version of rake and install another desired version using commands similar to the following:
gem uninstall rake 12.3.1
gem install rake 10.5.0
(Note: you might need to run as sudo for permissions)
I had a problem where I received the following error while trying to install rake 10.5.0:
Could not find a valid gem '0.8.7' (>= 0) in any repository
I resolved this problem by adding the following line to my Gemfile:
gem 'rake', ' <11.0'
After editing Gemfile I was able to successfully downgrade rake by updating my gems:
bundle update

"Could not find activesupport in any of the sources," even though activesupport is installed.

When I try to do rails server and thin start, both say: "Could not find activesupport-3.0.6 in any of the sources."
I have activesupport-3.0.7 installed. Do I need to revert so that activesupport matches my Rails version (3.0.6)?
Run bundle install in your rails directory (or change your Gemfile to require 3.0.7 instead of 3.0.6)
Also, when running the rails commands, you can prefix it with bundle exec to make sure it's using the correct version:
bundle exec rails server
Sounds like your Gemfile and your installed gems are out-of-sync:
Which version of Rails is listed in your Gemfile—3.0.6 or 3.0.7?
Have you run bundle install?

Bundler path problem

I've taken over ann application that was deployed to a server by someone else. There's something broken about the setup, some missing environment variable or similar problem but I am stumped. By the way this is obviously a Rails application, running under REE and mod_rails (passenger)
Here are some console logs that have me stumped. First, rake db:migrate claims I don't have Rails 2.3.8
$ rake db:migrate
(in /var/www/ems.trustthevote.org/ems/current)
Missing the Rails 2.3.8 gem. Please `gem install -v=2.3.8 rails`, update your
RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.
However, bundler says I do:
$ bundle list
Gems included by the bundle:
[...snip]
* actionmailer (2.3.8)
* actionpack (2.3.8)
* activerecord (2.3.8)
* activeresource (2.3.8)
* activesupport (2.3.8)
[...snip...]
* rails (2.3.8)
But on the other hand, gem says no:
$ gem list rails
*** LOCAL GEMS ***
Here are some relevant environment variables:
RUBYOPT=-rauto_gem
RUBYLIB=~/.gem
And finally, here's what Ruby thinks:
$ irb
irb(main):001:0> $:
=> ["~/.gem", "/usr/lib64/rubyee/site_ruby/1.8",
"/usr/lib64/rubyee/site_ruby/1.8/x86_64-linux", "/usr/lib64/rubyee/site_ruby",
"/usr/lib64/rubyee/vendor_ruby/1.8", "/usr/lib64/rubyee/vendor_ruby/1.8/x86_64-linux",
"/usr/lib64/rubyee/vendor_ruby", "/usr/lib64/rubyee/1.8", "/usr/lib64/rubyee/1.8/x86_64
linux", "."]
irb(main):002:0>
My eyes are crossed. What am I missing?
When using a custom bundle path, make sure that you run rake commands within the bundler environment.
bundle exec rake db:migrate
Try that out.
Bundler installs the gem in a custom directory. This is the reason why the result of gem list won't show them.
Unfortunately, I'm not sure why the command $ rake db:migrate doesn't find your gems.

Resources