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)にこれやってると思わなかったぞ、初めにこの記事書いた俺よ…
良いお年を。
Author And Source
この問題について(AmazonLinux2 + Ruby on Rails6でSQLite古いエラー), 我々は、より多くの情報をここで見つけました https://qiita.com/akibin/items/a7cec9c2628b0999bd60著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .