I'm attempting to install the 'mysql2' gem on my production server using Capistrano.
I want to use SQLite in development, and MySQL in production.
I develop on a Windows 7 machine, and production is using Ubuntu.
When I run bundle install
on my development machine, it installs MySQL2.
When Capistrano runs it against my production machine, it doesn't even get a mention in the output.
When I run the same command on my production machine directly on the shell, it too doesn't mention the gem.
I'm also finding that gem 'therubyracer', :platforms => :ruby
isn't being installed. I added this after the mysql2 entry. I'm hoping the two are related. mysql2 wasn't working before I added therubyracer.
As a result of all of the above, I'm getting the following error when I'm attempting to view my site:
Please install the mysql2 adapter:
gem install activerecord-mysql2-adapter
(mysql2 is not part of the bundle. Add it to Gemfile.)
I hope the amount of info I'm including below is more useful than it is a pain.
I appreciate I could place 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
* 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
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's going on
set :bundle_flags, "--deployment"
server "homer.gannicott.co.uk", :app, :web, :db, :primary => true
set :deploy_to, "/home/gannicott.co.uk/production/listen/www"
# 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
Cheers!
All sorted. Although it's with a work-around I'm not entirely happy with.
More searches of Google led me to this page:
http://redmine.autotelik.co.uk/blogs (do a search for 'mysql2' and it will find the relevant part)
This led me to... Stack Overflow (of course!):
Make bundler use different gems for different platforms
Which in turn led me to:
https://github.com/carlhuda/bundler/issues/646
When you run Bundler on Windows, it includes an entry for the Windows version of mysql2. However, this is different to what's required on Linux. As a result, the Gemfile.lock file is inappropriate for use on Linux.
The goal is to have the Gemfile.lock file generated by Bundler to be generated on the production server. From what I've read, this isn't generally recommended. That said, to achieve this...
I no longer include the Gemfile.lock file in my git repository:
echo 'Gemfile.lock' >> .gitignore
I've removed the file from git:
git rm Gemfile.lock
git commit -am "Removing Gemfile.lock to cope with Windows and Linux differences"
git push
I've told Capistrano to not run 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 the quotes, but after this experience I'm keen to see what get's installed when I deploy.
Now when I run cap production deploy
it'll regenerate the Gemfile.lock
file each time. This means the correct version of mysql2 is now used on my production server.
I'd imagine this can be improved upon, but for now it's working for me.
Hope this helps someone someday.
I have same problem with the therubyracer
gem. Coding on windows, deploying on linux.
In my Gemfile, I use :
group :production do
gem 'libv8', '= 3.3.10.4'
gem 'therubyracer'
end
On windows, I generate the Gemfile.lock with :
bundle install --without production
therubyracer
depends on libv8
, and it's should not be state explicitly
but as 'bundle install' resolves dependency on windows, the libv8 version on windows could be different than libv8 on linux. I was trapped into this version problem, and that was really tricky to find out what the hell was going wrong!
Generated Gemfile.lock
: (shortened)
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, this works perfectly without any script or not versioning Gemfile.lock
bundle install --deployment
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With