10
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-12-08

エンタメ系企業の社内もろもろを担当している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)にこれやってると思わなかったぞ、初めにこの記事書いた俺よ…

良いお年を。

10
13
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?