Bundler ignores installing MySQL2 gem when run on my production server

I am trying to install gem mysql2 on my production server using Capistrano.

I want to use SQLite in development and MySQL in production.

I am developing on a Windows 7 machine, and Ubuntu is being used in production.

When I run bundle install on my development machine, it sets MySQL2.

When Capistrano launches it against my production machine, it does not even receive a mention of the exit.

When I run the same command on my production machine directly on the shell, it also does not mention the gem.

I also found that gem 'therubyracer', :platforms => :ruby not installed. I added this after writing mysql2. I hope they are connected to each other. mysql2 did not work before I added therubyracer.

As a result of the foregoing, I get the following error when I try to browse my site:

Please install mysql2 adapter: gem install activerecord-mysql2-adapter (mysql2 is not included. Add it to the Gemfile.)

Additional Information

I hope the amount of information that I include below is more helpful than pain.

Gemfile

I appreciate that I can host mysql2 in 'production', but that didn't work.

 source 'http://rubygems.org' gem 'rails', '3.1.1' gem 'nokogiri' gem 'bcrypt-ruby' gem 'faker' gem 'will_paginate' gem 'capistrano' gem 'capistrano-ext' gem 'mysql2', "~> 0.3" gem 'therubyracer', :platforms => :ruby gem 'sqlite3' # Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails', '~> 3.1.4' gem 'coffee-rails', '~> 3.1.1' gem 'uglifier', '>= 1.0.3' end gem 'jquery-rails' group :test do # Pretty printed test output gem 'turn', :require => false end 

Capistrano Package Installation Command Output

  * executing "cd /home/gannicott.co.uk/production/listen/www/releases/20120223225131 && bundle install --gemfile /home/gannicott.co.uk/prod uction/listen/www/releases/20120223225131/Gemfile --path /home/gannicott.co.uk/production/listen/www/shared/bundle --deployment --without de velopment test" servers: ["homer.gannicott.co.uk"] [homer.gannicott.co.uk] executing command [homer.gannicott.co.uk] sh -c 'cd /home/gannicott.co.uk/production/listen/www/releases/20120223225131 && bundle install --gemfile /home/ gannicott.co.uk/production/listen/www/releases/20120223225131/Gemfile --path /home/gannicott.co.uk/production/listen/www/shared/bundle --dep loyment --without development test' ** [out :: homer.gannicott.co.uk] Installing rake (0.9.2.2) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing multi_json (1.1.0) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing activesupport (3.1.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing builder (3.0.0) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing i18n (0.6.0) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing activemodel (3.1.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing erubis (2.7.0) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing rack (1.3.6) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing rack-cache (1.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing rack-mount (0.8.3) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing rack-test (0.6.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing hike (1.2.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing tilt (1.3.3) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing sprockets (2.0.3) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing actionpack (3.1.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing mime-types (1.17.2) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing polyglot (0.3.3) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing treetop (1.4.10) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing mail (2.3.0) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing actionmailer (3.1.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing arel (2.2.3) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing tzinfo (0.3.31) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing activerecord (3.1.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing activeresource (3.1.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing highline (1.6.11) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing net-ssh (2.3.0) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing net-scp (1.0.4) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing net-sftp (2.0.5) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing net-ssh-gateway (1.1.0) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing capistrano (2.11.2) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing capistrano-ext (1.2.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing coffee-script-source (1.2.0) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing execjs (1.3.0) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing coffee-script (2.2.0) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing rack-ssl (1.3.2) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing json (1.6.5) ** [out :: homer.gannicott.co.uk] with native extensions ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing rdoc (3.12) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing thor (0.14.6) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing railties (3.1.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing coffee-rails (3.1.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing faker (1.0.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing jquery-rails (1.0.19) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Using bundler (1.0.21) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing rails (3.1.1) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing sass (3.1.15) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing sass-rails (3.1.5) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing uglifier (1.2.3) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Installing will_paginate (3.0.3) ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Updating .gem files in vendor/cache ** [out :: homer.gannicott.co.uk] ** [out :: homer.gannicott.co.uk] Your bundle is complete! It was installed into /home/gannicott.co.uk/production/listen/www/shared/bundle ** [out :: homer.gannicott.co.uk] command finished in 12924ms 

capistrano deploy.rb

 require 'bundler/capistrano' require 'capistrano/ext/multistage' # Based on: http://guides.beanstalkapp.com/deployments/deploy-with-capistrano.html set :application, "listen_later" set :scm, :git set :repository, "repos location" set :scm_passphrase, "passphrase" set :user, "username" set :stages, ["staging", "production"] set :default_stage, "staging" # The following needs to be added to avoid a failure (http://discuss.joyent.com/viewtopic.php?id=27326) default_run_options[:pty] = true namespace :deploy do desc "Tell Passenger to restart the app." task :restart do run "touch #{current_path}/tmp/restart.txt" end end # Removed --silent so I can see what going on set :bundle_flags, "--deployment" 

Capistrano production deployment file

 server "homer.gannicott.co.uk", :app, :web, :db, :primary => true set :deploy_to, "/home/gannicott.co.uk/production/listen/www" 

Database configuration file

 # SQLite version 3.x # gem install sqlite3 # # Ensure the SQLite 3 gem is defined in your Gemfile # gem 'sqlite3' development: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000 # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: adapter: sqlite3 database: db/test.sqlite3 pool: 5 timeout: 5000 production: adapter: mysql2 encoding: utf8 reconnect: false database: databasename pool: 5 username: username password: password #socket: **/opt/local/var/run/mysql5/mysqld.sock** # adapter: sqlite3 # database: db/production.sqlite3 # pool: 5 # timeout: 5000 

Hooray!

+4
source share
3 answers

Everything is sorted. Although this is a workaround, I'm not quite happy.

Study

Other Google searches led me to this page:

http://redmine.autotelik.co.uk/blogs (search for "mysql2" and it will find the corresponding part)

This led me to ... Stack overflow (of course!):

Make the packer use different gems for different platforms

Which in turn led me to:

https://github.com/carlhuda/bundler/issues/646

Problem

When you run the Bundler on Windows, it includes an entry for the mysql2 version for Windows. However, this is different from what is required for Linux. As a result, the Gemfile.lock file is unusable on Linux.

Decision

The goal is for the Gemfile.lock file generated by the Bundler to be created on the production server. From what I read, this is usually not recommended. However, to achieve this ...

I no longer include the Gemfile.lock file in the git repository:

 echo 'Gemfile.lock' >> .gitignore 

I deleted the file from git:

 git rm Gemfile.lock git commit -am "Removing Gemfile.lock to cope with Windows and Linux differences" git push 

I told Capistrano to not start in deployment mode by adding the following line to my config/deploy.rb :

 set :bundle_flags, "" 

You might want to include the --quiet flag in quotation marks, but after this experience I really want to see what will be installed during deployment.

Now when I run cap production deploy , it will regenerate the Gemfile.lock file every time. This means that the correct version of mysql2 is now being used on my production server.

I would suggest that this can be improved, but so far it works for me.

Hope this helps someone.

+9
source

I have the same problem with therubyracer stone. Windows encoding, deployment on Linux.

In my gemfile I use:

 group :production do gem 'libv8', '= 3.3.10.4' gem 'therubyracer' end 

In windows, I generate Gemfile.lock with:

 bundle install --without production 

therubyracer depends on libv8 , and it should not be explicitly specified, but since "bundle install" allows dependency on windows, the version of libv8 on windows may be different from libv8 on linux. I was trapped in this version issue, and it was very difficult to figure out what the hell was going wrong!

Generated Gemfile.lock : (reduced)

 GEM specs: libv8 (3.3.10.4) therubyracer (0.10.2) libv8 (~> 3.3.10) PLATFORMS x86-mingw32 DEPENDENCIES libv8 (= 3.3.10.4) therubyracer 

And then it works fine without any script or non- Gemfile.lock versions

 bundle install --deployment 
+1
source

Now it works in Bundler version 1.1.5

The only caveat is that it will not automatically add ruby ​​in the "Platforms" section. It's nice that he will not delete this line either.

In addition to this, he will list the agnostic version of the pearl platform before the platform-specific version.

 PLATFORMS ruby x86-mingw32 

In your case, you should see something like this:

 mysql2 (0.3.11) mysql2 (0.3.11-x86-mingw32) 

Not only:

 mysql2 (0.3.11-x86-mingw32) 

With the new version of bundler.

0
source

Source: https://habr.com/ru/post/1398146/


All Articles