19日目 データベース(開発環境)作成[JRuby 9.1.17 &PostgreSQL]②
おはようございます。
昨日の続きを書きます。
以下の環境で、Railsアプリの新規作成を行ないましたが、Railsを通してデータベースを作成しようと思います。
・Windows 10
・JRuby 9.1.17
・Rails 4.2.4 (※「bundle install」コマンドにてインストール)
・bundler 1.17.3 (※バージョン「2.3.15」も同時にインストール済)
・PostgreSQL 10.21
データベースを作成するコマンドを入れてみると…?
昨日の記事にて、上記の環境でデータベース作成を行なうためのコマンドとして、以下のように入力する必要がありそうだとわかったので、今日はそのコマンドを実際に入力してみます。
jruby -S bundle _1.17.3_ exec rake db:create
そしたら、以下のようにエラーが表示されました。
「Load Error: no such file to load -- active_record/connection_adapters/postgresql/explain_pretty_printer」
という、ファイルが存在しない旨のエラーのようです。
運よく今回の問題と似たような内容の記事をネットから見つける
エラーの内容を見ると、他にも同じ内容でつまずいてそうな人がいそうだな~と何となく勘で、そのままネットから
「Load Error: no such file to load -- active_record/connection_adapters/postgresql/explain_pretty_printer」
をそのままコピペして検索してみました。
すると以下の記事がヒットしました。
英文ではありますが、自動翻訳をかけた日本語で見てみると、
どうやら、JRuby(9.1.xバージョンあたり?)にてRails 2.3をインストールする際に頻出する問題のようです。そのための解決方法の一つとしては、C言語で作られたRubyとDevkitのインストールを進められているようではありますが。
もう少し読み進めてみると、今度は以下の文章が出てきます。(日本語自動翻訳済)
Gemfileから「activerecord-jdbcpostgresql-adapter」に対して、特にバージョンを指定していない場合は、自動的に50.0以上のバージョンがプルダウンされるそうで、そのバージョンは他の依存関係のバージョン(Rails 4.2.8)と競合するそうです。(今回の開発環境ではRails 4.2.4)
そのため、どうしてもJRubyを使いたい場合は、Gemfileから、「activerecord-jdbdpostgresql-adapter」に対して、古いバージョンのインストールを強制させることによって、動くようです。
今回の問題についてネットで記載されていた原因と同じものか確認
そこで、現在の「Gemfile.lock」の内容を確認します。「Gemfile.lock」に関してはこちらの記事をご参考ください。
「Gemfile.lock」の場所は、Railsアプリケーションのプロジェクトデータ(ディレクトリ)にあって、その場所をVisual Studio Codeで開くと、以下のように「Gemfile.lock」という名前があると思うので、その「Gemfile.lock」をダブルクリックして開きます。
※ただし、「Gemfile.lock」は、「bundle install」コマンドを実行して一度は成功済であることが前提です。
すると、以下のように画面右側に「Gemfile.lock」の内容が表示されるので、その中から「activerecord-jdbdpostgresql-adapter」の箇所を探してみます。
そしたら、「activerecord-jdbdpostgresql-adapter」の箇所を見つけました。
どうやら、バージョンは50.0を対象に自動的にインストールされていたそうで、先ほどネットで検索した記事と同じ内容の問題であり、他の依存関係のバージョン(Rails 4.2.8)と競合することが原因で、今回のエラーが起こったとみなしても良さそうです。
特定のGemファイルを古いものに更新
ということで、「activerecord-jdbdpostgresql-adapter」を対象に古いバージョンを指定して、「bundle update」を実行して、Gemファイルを更新してみることにします。
先ほど、「Gemfile.lock」をダブルクリックして開いたかと思いますが、その「Gemfile.lock」の1つ上のファイルに「Gemfile」という名前があるので、その「Gemfile」をダブルクリックして開きます。
すると、上の写真のように、ダブルクリックで開いた「Gemfile」の中(Visual Studio Codeの画面右側)に
gem ‘activerecord-jdbcpostgresql-adapter’
というバージョンが特に指定されていない行があると思います。
そこで、その行を以下に差し替えます。
gem "activerecord-jdbcpostgresql-adapter", "1.3.24", :platform => :jruby
バージョンは、先ほど載せた記事の中に記載のあった"1.3.24"をそのまま使ってしまいます。(以下に再掲します。)
理由は、今のところバージョンを参考にする方法がない(わたしが知らないだけかもしれませんが)ので、とりあえずやってみて上手くいかなかったらまたそれから考えればいっかという精神です。
行の差し替えが終わったら次は、「bundle update」を用いてGemファイルの更新を行なう必要があります。その具体的なコマンドは以下の通りです。
jruby -S bundle _1.17.3_ update
jrubyを明示的に用いる必要があることと、わたしのPCには2つ以上のbundlerのバージョンがインストール済(1.17.3と2.3.15)であるため、それぞれを指定しながら「bundle update」できるように、上記のコマンドで入力します。
実際にコマンドを入力してみると、コマンドを入力してから数十秒後くらいに以下のようにGemfileの更新内容が表示され、「activerecord-jdbcpostgresql-adapter」に関するGemfileのみ更新されると思います。
Gemfileの更新は以下の写真のように「Bundle updated!」というメッセージが出ていれば成功です。
実際にデータベースが作られたかどうか確認
そこで先ほどのデータベースを作成するコマンドを再度入れてみます。
jruby -S bundle _1.17.3_ exec rake db:create
すると、以下のように特にエラーメッセージが出ることもなく、終了しますが、内部ではデータベース作成済です。
実際に作られたかどうか、postgreSQLのコマンドラインツールを起動して確認します。起動方法は、過去に書いた以下の記事の見出し「3. PostgreSQL 10のデータベースへの接続確認」にて具体的な手順が書かれてありますので、ご参考ください。
上記の記事を参考にすると、下の写真のようにpostgreSQLのコマンドラインツール上から作成済のデータベース一覧を確認でき、その一覧の中に、今回で新規作成したデータベースの名前があると思います。
ちなみに、作成したデータベースの「名前」(写真の例では「real_chat」)と「所有者」(写真の例では「development」)は、それぞれ「アプリケーション名」と「ユーザー名」を表し、
Railsアプリケーションのプロジェクトデータ(ディレクトリ)内の「config」というフォルダの下の「database.yml」を開いたときに、「development:」の「database:」と「username:」でそれぞれ設定されている内容と同じです。(参考として以下に写真を貼ります)
ここまでで、データベースの作成が終わりました。
おわりに
本日もここまで読んでくださってありがとうございました。
データベースの作成が終わりましたので、次回はローカルでアプリを動かして見ようかと思います。
次のターンへ続きます。