Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?
@akibin

AmazonLinux2 + Ruby on Rails6でSQLite古いエラー

エンタメ系企業の社内もろもろを担当しているakibinです。

Twitterアカウント @AkibinMusic
Youtubeチャンネル

内容

AmazonLinux2を立てて、Railsをインストールしたけどアプリ起動したら以下がエラーが出た場合の対処方法を書き書きします。

【エラー】
Your version of SQLite (3.7.17) is too old. Active Record supports SQLite >= 3.8.

なぜエラーが出るのか

AmazonLinux2にはsqlite3のバージョン3.7がデフォルトでインストールされており、これがyumで利用しているらしく、削除することはできません。がしかし、Rails 6を動かすには、sqlite3のバージョン3.8以上が必要なので、古い!と↑で怒ってるんですね。

対処方法

既存のSQLiteはほっておいて、3.8以上のSQLiteを別途インストールします。

# アプリ用のユーザのホームディレクトリで作業(私は)
$ cd /home/appuser 
# 3.34.0をダウンロード
$ wget https://www.sqlite.org/2020/sqlite-autoconf-3340000.tar.gz
$ tar xzvf sqlite-autoconf-3340000.tar.gz
$ cd sqlite-autoconf-3340000
# もとから入っているsqliteと競合しないように /opt/sqlite/sqlite3にインストールする
$ ./configure --prefix=/opt/sqlite/sqlite3
$ make
$ sudo make install
# バージョン確認
$ /opt/sqlite/sqlite3/bin/sqlite3 --version
3.34.0 2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b

アプリで使用するSQLiteとして、今回インストールしたSQLiteをgemで指定する。

# アプリ用のディレクトリに移動
$ cd /var/www/rails/webapp 
# gemで新しいSQLiteを指定
$ gem install sqlite3 -- --with-sqlite3-include=/opt/sqlite/sqlite3/include \
   --with-sqlite3-lib=/opt/sqlite/sqlite3/lib
# 指定が正しくできているか確認
$ irb
irb(main):001:0> require 'sqlite3'
=> true
irb(main):002:0> SQLite3::SQLITE_VERSION
=> "3.34.0"  # できてる
irb(main):003:0> exit

あと新しいSQLiteにパスを通す必要があるので以下作業実施。

$ echo 'export LD_LIBRARY_PATH="/opt/sqlite/sqlite3/lib"' >> .bash_profile
$ source .bash_profile

これで再度アプリ起動するとエラー解消して以下が出ました!

こちらの記事参照してSQLite部分のみ抜粋させていただきました!わかりやすかったです!

今年も終わるは早いわ…

2020年12月31日:SQLiteが使えなかったので追記

SQLiteを使おうとしたところ、以下エラーが発生しました。

user$ sqlite3
sqlite header and source version mismatch linux
新しいバージョン
古いバージョン

SQLiteへのリンクが古いほうになっていることで発生しているようです。
リンク先を新しい方にします。

user$ sudo mv /usr/bin/sqlite3 /usr/bin/sqlite3_old #古いバージョンを一応バックアップ
user$ sudo ln -s /opt/sqlite/sqlite3/bin/sqlite3 /usr/bin/sqlite3 #新しいバージョンへシンボリックリンクをはる
user$ sqlite3 -version
3.34.0 2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b
user$ sqlite3
SQLite version 3.34.0 2020-12-01 16:14:00
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> 

使えるようになりました!

年末の早朝(am6:00)にこれやってると思わなかったぞ、初めにこの記事書いた俺よ…

良いお年を。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?