Bundler - Multiple Platforms
As a Rails engineer, you inevitably have run across an issue with Nokogiri when running
Most of the issues are caused by compilation issues.
Thankfully those have been fixed with Nokogiri now provides pre-compiled native gems. This means that we don't need to compile Nokogiri on our local machines.
The Nokogiri urges users to not try to
"We expect it will be a much better experience for you and allow us to focus our efforts on improving functionality rather than diagnosing installation issues."
That's all great but when you run
bundle install on your Mac, bundler only installs the version for Darwin (the OS for Macs).
There's a high chance that your staging and production servers are running Linux. So when it's time to deploy, it will fail because it's missing the Linux version of the Nokogiri gem.
Configuring Bundler to accept multiple platforms
- Ensure that you are running on Bundler 2.2.3+
2. If you are have just updated Bundler, then you'll need to delete your
Gemfile.lock file and re-run
Near the end of the
Gemfile.lock file, you'll see the PLATFORMS section. If you're running MacOS Big Sur, you'll see this.
You can add the Linux to the list of platforms by running this command.
bundle lock --add-platform x86_64-linux
NOTE: If your local machine is Linux and you need to add Darwin for the other developers on your team, just run:
bundle lock --add-platform x86_64-darwin-20
You should see this change in your Gemfile
PLATFORMS x86_64-darwin-20 + x86_64-linux
Then you will successfully have both Linux and Mac versions of Nokogiri!!!