Set ruby version in Gemfile
In Version 1.3 and earlier of Bundler you couldn’t specify the patchlevel:
The
ruby
directive explicitly leaves out the ability to specify a patch level. Ruby patches often include important bug and security fixes and are extremely compatible.
This changed in version 1.5, the docs now say:
In the
ruby
directive,:patchlevel
is optional, as patchlevel releases are usually compatible and include important security fixes. The patchlevel option checks theRUBY_PATCHLEVEL
constant, and if not specified then bundler will simply ignore it.
So you can specify the patchlevel like this:
ruby '2.0.0', :patchlevel => '353'
Fix Your Ruby version is 2.6.8, but your gemfile specified 2.5.5
Finally got it working.
So the key to the problem as well to the solution was the fact that which bundle
gave:
/usr/local/bin/bundle
while which ruby gave:
/Users/Mahmoud/.rbenv/shims/ruby
indicating that bundle isn't using ruby from rbenv.
I already had the path set in ~/.bash_profile
:
export PATH="$HOME/.rbenv/shims:$PATH"
eval "$(rbenv init -)"
but apparently this was not enough as I was using zsh. Had to add those same 2 lines to ~/.zshrc
as well and restarted terminal. Now bundle install is working as expected.
After updating ~/.zshrc
which bundle
gives:
/Users/Mahmoud/.rbenv/shims/bundle
indicating that the problem was just that bundle was using the wrong ruby.
So if you have this problem, just make sure ~/.bash_profile
and ~/.zshrc
have the correct path by adding the 2 lines indicated above. Restart terminal and check if its working now.
Ruby version in the Gemfile
Please follow the steps to solve
You can check which ruby
version is associate with your app by command
heroku run "ruby -v"
It is good to have default version of ruby
which is 2.2.4
in order to solve your problem. If your ruby
version is older than 2.2.4
then please upgrade it.
after checking/upgrading version You can use the ruby
keyword in your app’s Gemfile
to specify a particular version of Ruby.
source "https://rubygems.org"
ruby "2.2.4"
You will need to install and update bundler again
$ gem install bundler
$ bundle update
Ruby Bundler - Multiple Ruby versions in the same gemfile
Gemfiles Declare Dependencies
A Gemfile declares a dependency on a Ruby version, with or without semantic versioning constraints. It is not meant to control multiple build targets for your application. It simply enforces that the Ruby version available to your app/gem is whatever you've defined. For example:
# Will fail if run with a different RUBY_VERSION.
ruby '2.2.4'
# Allows RUBY_VERSION >= 2.2.4, but <= 2.3.
ruby '~> 2.2.4'
# Allows either Ruby 2.2.4+ or 2.5.5+, with
# a minimum (but no maximum) patch version.
ruby '~> 2.2.4', '~> 2.5.5'
However, it won't install a given Ruby, nor do anything other than raise an error and a non-zero exit status when running bundler install
. You need to take a different approach to test multiple targets.
Changing Build Targets with Continuous Integration (CI) Tools
If you're using an external CI like TravisCI, you can create a build matrix that targets multiple Ruby versions to test against. Whether you remove the Ruby version constraint altogether, or specify a supported range, is up to you. Leveraging your CI tool to build against the versions of Ruby you plan to support is really the best approach, though, whether or not you constrain your Ruby runtime in a Gemfile.
For example, you might use a matrix in your travis.yml like so:
language: ruby
rvm:
- 2.2.4
- 2.5.5
Switching Gemfiles
If you insist on doing it the way you're doing it, with a singular Ruby version allowed in your Gemfile, then you might consider having two separate gemfiles with different names in your source tree, such as Gemfile-2.2.4 and Gemfile-2.5.5. You can then specify which Gemfile to use with Bundler's --gemfile
flag , or by symlinking a custom Gemfile to the canonical Gemfile
for your project.
Here are some examples to consider:
# Resolve against a specific Gemfile with
# hard-coded Ruby version.
$ ls Gemfile*
Gemfile-2.2.4 Gemfile-2.5.5
$ bundle install --gemfile="Gemfile-2.2.4"
# Resolve against whatever custom file is
# symlinked to your ./Gemfile.
$ ln -sf Gemfile{-2.5.5,}
$ ls -F Gemfile*
Gemfile@ Gemfile-2.2.4 Gemfile-2.5.5
$ bundle install
Both approaches work, but the former is more flexible at the cost of needing to specify your chosen Gemfile each time, while the latter can help when you have a development/testing workflow that doesn't support Bundler's --gemfile
flag.
Changing Rubies with Ruby Managers
If you have multiple Ruby versions in development, best practice is to use a version manager such as rvm, rbenv, or chruby. You can use your version manager to change rubies back and forth manually as needed.
You might also check whether your version manager supports auto-switching on .ruby-version
or other configuration files. You'd still have to update that file each time you want to build or test against a different Ruby, but you wouldn't have to keep changing your Gemfile contents, re-pointing the Gemfile symlink, or updating a flag on each call to Bundler.
Whether or not any given approach is better than others will depend on your workflow. No technical solution will fit all circumstances, so your mileage may legitimately vary.
How to fix Your Ruby version is 2.3.0, but your Gemfile specified 2.2.5 while server starting
You better install Ruby 2.2.5 for compatibility. The Ruby version in your local machine is different from the one declared in Gemfile.
If you're using rvm:
rvm install 2.2.5
rvm use 2.2.5
else if you're using rbenv:
rbenv install 2.2.5
rbenv local 2.2.5
else if you can not change ruby version by rbenv,
read here
How to set up a .ruby-version less strict?
It's funny that you even said "like in the Gemfile...", because you can define the required ruby version in the Gemfile
, instead of having a .ruby-version
file:
ruby '~> 3.0' # or whatever
gem 'some-dependency'
gem 'another-dependency'
# ...
Related Topics
Coping with "String Contains Null Byte" Sent from Users
Why Is Rack Response Body an Array Not a String
Ruby Syntax: Break Out from 'Each.. Do..' Block
Benefits of Using 'Hash#Fetch' Over 'Hash#[]'
Where Is the Best Place to Add Methods to the Integer Class in Rails
"Error: Sql.H Not Found" When Installing Ruby-Odbc Gem on Ubuntu
Why Is a String Key for a Hash Frozen
Rails 5, "Nil Is Not a Valid Asset Source"
Is Communication Between Two Ruby Processes Possible/Easy
Validate That a Value Is in a Certain Range, E.G. 1 <= Val <=2
How to "Nest" the Inclusion of Modules When Using the Ruby on Rails Activesupport::Concern Feature
Can Multiple Sidekiq Instances Process The Same Queue
Lion: Problem with Rvm Installing Rubies - Problem Related to Openssl
Why Does Array#Each Return an Array with The Same Elements
How to Use Factorygirl to Create an Attribute Called "Alias"
Activeadmin: Adding Delete for a Nested Resource
How to Do Fuzzy Substring Matching in Ruby
Ruby No Implicit Conversion of Fixnum into String (Typeerror)