マイヒロです!
久しぶりにCloud9上でRuby on Railsをインストールし、新規プロジェクトを開始したら、さっそくエラーが起きました!
結論からいうと、原因はCloud9ワークスペースにMysqlのクライアントが無かったことで、mysqlのクライアントをインストールして再度bundle installを実行すると解決しました。
エラーの発生から、解消までの道のりを書いていきますので、同じような事例に悩まされる初学者の助けになれば幸いです!
エラー発生!
ubuntu:~/environment $ rails new myproject --database=mysql --skip-test --skip-active-storage
こんな感じでRailsのプロジェクトを開始しようとしました。
しばらくすると赤字でエラーが表示されます。
(中略)
Installing mysql2 0.5.3 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
(中略)
An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/' succeeds before bundling.
In Gemfile:
mysql2
run bundle exec spring binstub --all
bundler: command not found: spring
Install missing gem executables with bundle install
ナンデダ…と思考停止をはさみつつ、冷静にエラーを読みます。
gemのインストール( bundle install で実行されるところ)でエラーが起きていますね。重要なのは赤字のエラーのうちの最後の一文で「bundleする前にgem install mysql2 -v ‘0.5.3’ –source ‘https://rubygems.org/’ を確認するように!」というところで、親切にもやるべきことが書かれています。
それでは言われたとおりにTerminalで実行してみます。
ubuntu:~/environment/message-board (master) $ gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'
Building native extensions. This could take a while...
ERROR: Error installing mysql2:
ERROR: Failed to build gem native extension.
current directory: /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/mysql2-0.5.3/ext/mysql2
/home/ubuntu/.rvm/rubies/ruby-2.6.3/bin/ruby -I /home/ubuntu/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0 -r ./siteconf20210203-20409-13l6y2t.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
checking for -lmysqlclient... no
-----
mysql client is missing. You may need to 'sudo apt-get install libmariadb-dev', 'sudo apt-get install libmysqlclient-dev' or 'sudo yum install mysql-devel', and try again.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
(以下略)
はい、赤字のところに注目ください!(実際の表示は赤字になっていませんが、わかりやすいように着色しています)
「mysql client is missing」というところがすべてを言い表していて、myslqクライアントがありませんよ!って意味です!
その後に続く一文には対処方法が書かれており、「‘sudo apt-get install libmariadb-dev’か、 ‘sudo apt-get install libmysqlclient-dev’ または‘sudo yum install mysql-devel’を実行する必要があります。そしてもう一度試してみてください!」っていう意味ですね!
解決してみる!
先ほどのエラーに書かれていたコマンドを実行することが対処方法だとわかりましたので、sudo apt-get install libmysqlclient-devを実行します!なお、私はapt-get ではなくapt※を使いました。
※apt と apt-get の違い(rs-techdevさんの記事です)
ubuntu:~/environment/message-board (master) $ sudo apt install libmysqlclient-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libmysqlclient20
The following NEW packages will be installed:
libmysqlclient-dev libmysqlclient20
0 upgraded, 2 newly installed, 0 to remove and 9 not upgraded.
Need to get 1677 kB of archives.
After this operation, 10.0 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libmysqlclient20 amd64 5.7.33-0ubuntu0.18.04.1 [687 kB]
Get:2 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libmysqlclient-dev amd64 5.7.33-0ubuntu0.18.04.1 [989 kB]
Fetched 1677 kB in 0s (34.4 MB/s)
Selecting previously unselected package libmysqlclient20:amd64.
(Reading database ... 131686 files and directories currently installed.)
Preparing to unpack .../libmysqlclient20_5.7.33-0ubuntu0.18.04.1_amd64.deb ...
Unpacking libmysqlclient20:amd64 (5.7.33-0ubuntu0.18.04.1) ...
Selecting previously unselected package libmysqlclient-dev.
Preparing to unpack .../libmysqlclient-dev_5.7.33-0ubuntu0.18.04.1_amd64.deb ...
Unpacking libmysqlclient-dev (5.7.33-0ubuntu0.18.04.1) ...
Setting up libmysqlclient20:amd64 (5.7.33-0ubuntu0.18.04.1) ...
Setting up libmysqlclient-dev (5.7.33-0ubuntu0.18.04.1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for libc-bin (2.27-3ubuntu1.4) ...
ubuntu:~/environment/message-board (master) $
エラーもなく無事にmysqlのクライアントがインストールできたようです!
それでは、続けて最初は失敗した bundle install をもう一度やってみます。
ubuntu:~/environment/message-board (master) $ bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
(中略)
Ruby Sass has reached end-of-life and should no longer be used.
* If you use Sass as a command-line tool, we recommend using Dart Sass, the new
primary implementation: https://sass-lang.com/install
* If you use Sass as a plug-in for a Ruby web framework, we recommend using the
sassc gem: https://github.com/sass/sassc-ruby#readme
* For more details, please refer to the Sass blog:
https://sass-lang.com/blog/posts/7828841
ubuntu:~/environment/message-board (master) $
やりました!今度はエラーがありません!
ようやく開発に着手できそうです!同じ目にあった人はぜひご参考に!