Ruby mysql2 error on migration

Hi guys,

I’m trying to ue the vanilla_mysql.rb importer script to migrate my shitty forum to the awesome discourse platform. :slight_smile: However, when I execute the commands this happens:

root@discourse-app:/var/www/discourse# gem install mysql2 --platform=ruby
Building native extensions. This could take a while…
Successfully installed mysql2-0.4.6
1 gem installed

root@discourse-app:/var/www/discourse# bundle exec ruby script/import_scripts/vanilla_mysql.rb
script/import_scripts/vanilla_mysql.rb:1:in require': cannot load such file -- mysql2 (LoadError) from script/import_scripts/vanilla_mysql.rb:1:in
root@discourse-app:/var/www/discourse#


What am I doing wrong / how can I fix it? :frowning: I’m using the default docker container on a clean ubuntu 16.04 vps.

Try this inside the docker container:

apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libmysqlclient-dev
su discourse -c 'export IMPORT=1; bundle install --no-deployment --without test --without development --path vendor/bundle'
su discourse -c 'export IMPORT=1; bundle exec ruby script/import_scripts/vanilla_mysql.rb'
4 Mi Piace

Thanks for your reply. Here is a short version of my output:

**root@discourse-app:/var/www/discourse#: su discourse -c 'export IMPORT=1; bundle install --no-deployment --without test --without development --path vendor/bundle'**
[[....]]
An error occurred while installing mysql2 (0.4.6), and Bundler cannot
continue.
Make sure that `gem install mysql2 -v '0.4.6'` succeeds before bundling.

**root@discourse-app:/var/www/discourse#: exec ruby script/import_scripts/vanilla_mysql.rb'**                               Could not find gem 'mysql2' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.

**root@discourse-app:/var/www/discourse#: bundle install**
[[....]]
Bundle complete! 96 Gemfile dependencies, 175 gems now installed.
Gems in the group development were not installed.
Bundled gems are installed into ./vendor/bundle.

**root@discourse-app:/var/www/discourse#: su discourse -c 'export IMPORT=1; bundle exec ruby script/import_scripts/vanilla_mysql.rb'**                               Could not find gem 'mysql2' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.

:confused:

You need to install a dependency for it to work. I guess it’s missing.

apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libmysqlclient-dev
4 Mi Piace

Thank you so mutch Gerhard! :slight_smile: It worked, I owe you.

3 Mi Piace

Hi

I am facing this same situation but I am having trouble issuing these su discourse -c commands, they ask me for a password. I don’t think I created this user, it comes with the Docker container, so how do I get its password? Or how do I avoid being asked for one?

Thanks!

Is this a development install, an install from the standard guide, or something else?

If it’s from the standard guide you shouldn’t be prompted for a password when using su discourse -c from within the container.

1 Mi Piace

Thanks, your confirmation that I “shouldn’t be prompted” sent me searching again, this time in a slightly different direction…

And I solved it! I was using a scripted command to enter the container that had slightly different options than the standard ./launcher enter app. One of them (maybe the absence of the --login option?) was causing this difference in behavior.

Anyway I am going to make sure I always use ./launcher going forward, there’s lots of stuff in there. Once again, thanks for your answer.

Another tip that might be useful for anyone else coming into this thread:

Using that command given above with IMPORT=1 will trigger this part of your Gemfile:

if ENV["IMPORT"] == "1"
  gem 'mysql2'
  gem 'redcarpet'
  gem 'sqlite3', '~> 1.3.13'
  gem 'ruby-bbcode-to-md', github: 'nlalonde/ruby-bbcode-to-md'
  gem 'reverse_markdown'
  gem 'tiny_tds'
end

I ran into problems with the installation of tiny_tds, and then with another thing it depends on called FreeTDS. After some wasted time on this I realized these are useful only for MS SQL imports, which I won’t be using, so I simply commented out the tiny_tds line in my Gemfile.

(it would be nice to have a comment in front of each of those packages saying what they are used for, if anyone knows)

2 Mi Piace

Ciao. Sto riscontrando lo stesso problema qui durante l’esecuzione di questo script, ma questi comandi non stanno aiutando… Questo è l’output che ottengo quando provo a eseguire su discourse -c 'export IMPORT=1; bundle exec ruby script/import_scripts/vanilla_mysql.rb':

root@ip-xxx-xx-xx-xx-app:/var/www/discourse# su discourse -c 'export IMPORT=1; bundle exec ruby script/import_scripts/snuffhouse.rb'
Stai cercando di installare in modalità di distribuzione dopo aver modificato
il tuo Gemfile. Esegui `bundle install` altrove e aggiungi
il Gemfile.lock aggiornato al controllo di versione.

Se questa è una macchina di sviluppo, rimuovi il blocco /var/www/discourse/Gemfile
eseguendo `bundle config unset deployment`.

L'elenco delle origini è cambiato
Le dipendenze nel tuo gemfile sono cambiate

Hai aggiunto al Gemfile:
* mysql2
* redcarpet
* sqlite3 (~> 1.3, >= 1.3.13)
* ruby-bbcode-to-md
* reverse_markdown
* tiny_tds
* csv

Ciao, ho risolto e ho dimenticato di rispondere qui. Il fatto è che stavo cercando di eseguire uno script di migrazione per un forum che utilizza mysql e stavo riscontrando alcuni errori. Ma ho appena seguito i seguenti passaggi e ha funzionato bene:

  • All’interno della tua docker-machine dove è in esecuzione Discourse:
# Entra nella directory del progetto
cd /var/www/discourse

# Installa le dipendenze MySQL
apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libmariadb-dev

# Installa le gemme MySQL (export = 1)
su discourse -c 'export IMPORT=1; bundle install'

# Esegui il tuo script (vanilla_mysql in questo caso)
su discourse -c 'export IMPORT=1; bundle exec ruby script/import_scripts/vanilla_mysql.rb'

Ho appena fatto questo su una nuova macchina che ho dovuto avviare e ha funzionato bene.