LoginSignup
0
0

More than 1 year has passed since last update.

[Rails6] AmazonLinux2 で SQLite3 を使用する方法

Last updated at Posted at 2022-05-15

動機

  • Cloud9のAmazonLinux2 環境でRails6以上を使用しようとすると、「SQLite3のバージョンが古い」とエラーが出る。
$ rails db:migrate
Your version of SQLite (3.7.17) is too old. Active Record supports SQLite >= 3.8.

原因

  • AmazonLinux2にデフォルトでインストールされているSQLite3のバージョンが「3.7」
  • Rails6以上を動かすには、バージョン「3.8」以上が必要

目的

  • 以下の記事を参考にSQlite3のバージョンを上げる
    (正確にはバージョン「3.8」以上をのSQLite3をインストールし、
    Railsアプリで新しくインストールしたSQLite3を使用するようにする)

https://blog.serverworks.co.jp/tech/2020/01/19/rails6/

  • 各操作の詳細をなるべく理解する

環境

Ruby version

$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

RPM package のインストール

  • パッケージ管理コマンドに「rpm」と「yum」がある
    • rpm: 個々のパッケージ同士の依存関係を管理
    • yum: 全てのパッケージの依存関係を管理

https://eng-entrance.com/linux-package-rpm-yum-def#yum

今回はyumコマンドを使用して、インストール
なぜこれらが必要かは知らない

$ sudo yum install -y \
  ruby-devel \
  rpm-build \
  git \
  gcc \
  gcc-c++ \
  zlib-devel \
  openssl-devel \
  rubygems-devel

使用したオプション

  • -y : 問い合わせすべてにYesと答える
    • これをつけないと、y+Enterを押し続けることになるのだろう

https://uxmilk.jp/9899

Node.jsのインストール(未解決)

  • Webpacker で使用するから
  • インストールの際にNodejs のサイトのインストール方法参照

Nodeのサイトの見方

https://github.com/nodesource/distributions

  • Linuxのディストリビューリョンによって、インストールコマンドが異なる
  • AmazonLinux2 はRedHat 系のEnterprise Linux の一種

https://ja.wikipedia.org/wiki/Linux%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3

  • サイトの上の方はUbuntsuとかDebianなど他のディストリビューリョンのインストール方法が書いてある
    • スクロールすると「Enterprise Linux based distributions」があるので、その下からを参考にする。

Debian https://openstandia.jp/oss_info/debian/

  • 今回は最新のversion18を実行
# No root privileges
$ curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
$ sudo yum install -y nodejs
  • エラーが出た
    • こちらは未解決 (上記のNodeJSのインストールしなくてもうまくいく)
$ sudo yum install -y nodejs
...
Error: Package: 2:nodejs-18.1.0-1nodesource.x86_64 (nodesource)
           Requires: libc.so.6(GLIBC_2.28)(64bit)
Error: Package: 2:nodejs-18.1.0-1nodesource.x86_64 (nodesource)
           Requires: libm.so.6(GLIBC_2.27)(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

yarnのインストール

$ url -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
$ sudo yum install -y yarn

SQLite3のインストール

  • check the current version of sqlite
$ rpm -q sqlite
sqlite-3.7.17-8.amzn2.1.1.x86_64

3.30.1をダウンロード

$ wget https://www.sqlite.org/2019/sqlite-autoconf-3300100.tar.gz

wgetコマンド

  • 指定したURLのファイルをダウンロードする
$ wget <URL>

wget説明 https://atmarkit.itmedia.co.jp/ait/articles/1606/20/news024.html

tar.gz拡張子 (タージーゼット)

https://wa3.i-3-i.info/word12942.html

ダウンロードした圧縮ファイルを展開

$ tar xzvf sqlite-autoconf-3300100.tar.gz

アーカイブ

  • 複数のファイルやフォルダを一つにまとめること

アーカイブファイル

  • 複数のファイルやフォルダを一つにまとめたファイル

tarコマンド

  • tarファイルという「アーカイブファイルを作成する」コマンド

https://www.sejuku.net/blog/51116

各オプション

  • c: 新規にアーカイブを作成する(作成に使用)
  • x: アーカイブファイルを展開(展開に使用)
  • z: gzipの圧縮処理を行う(圧縮したものを一発で作成・展開したい時使用)
  • v: 圧縮・展開時に詳細を表示する(作成・展開どちらでも使用)
  • f: アーカイブファイルを指定する(作成・展開どちらでも使用)

アーカイブ作成(cvfを使用)

$ tar cvf アーカイブ名 ファイル1 ファイル2…

# test1.txt test2.txtがtest.tarというファイルにまとめられる
$ tar cvf test.tar test1.txt test2.txt

アーカイブ展開(xvfを使用)

$ tar xvf アーカイブ名

# test.tarファイルを展開
$ tar xvf test.tar

gzipコマンド

  • ファイルを「圧縮する」時につかうコマンド

両方とも、UNIX系のOS(LinuxとかMacとか)で使える。

展開したフォルダに移動

$ cd sqlite-autoconf-3300100

Linux環境にアプリを「ソースコードからインストールする」

# もとから入っているsqliteと競合しないように /opt/sqlite/sqlite3 にインストールします
$ ./configure --prefix=/opt/sqlite/sqlite3

「./configure」

  • configureという「スクリプトファイルを実行」しています(configureというコマンドがあるわけではない)。
  • ダウンロードしたフォルダの中に.configureフォルダがあるから、それを実行している.
  • 「MakeFile」が作成される

「--prefix=ディレクトリ名」

  • どこにインストールするかを決める(インストール先を指定する引数)

アプリのコンパイル

$ make

make

  • configureで作成されたMakeFileに基づいて、アプリのコンパイル

https://qiita.com/chihiro/items/f270744d7e09c58a50a5

アプリをインストール

$ sudo make install
  • makeコマンドによってコンパイルされたアプリをインストールします。

https://qiita.com/chihiro/items/f270744d7e09c58a50a5

バージョン確認(インストール先確認)

$ /opt/sqlite/sqlite3/bin/sqlite3 --version
3.30.1 2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b

gemの指定先を変える

  • SQLite3本体は、/opt/sqlite/sqlite3にインストールしたので、gemもそちらを利用するように指定し、インストールします。
$ gem install sqlite3 -- --with-sqlite3-include=/opt/sqlite/sqlite3/include \
   --with-sqlite3-lib=/opt/sqlite/sqlite3/lib

パスを通す

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

https://teratail.com/questions/234163

echo

  • 文字列出力、変数の中身出力するコマンド

これを応用すると

「ファイルに追記」が可能

$ echo "文字列" >> ファイル名

https://qiita.com/masato930/items/6031785e23d8fdbb1a5a

LD_LIBRARY_PATHとは

  • 正直よくわからない
  • Rubyとかに限るものではない環境変数(OSがライブラリを探す時に使用するらしい)

https://oshiete.goo.ne.jp/qa/1511011.html

0
0
0

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
0
0