【Sinatra】Active Recordでつまずいた!~事象編

SinatraでActive Recordを使い、マイグレーションを実行しよとしたときにめちゃめちゃつまずいた話です。

解決編はこちらからどうぞ。
https://sunnydayservice.qrunch.io/entries/OtGeYUlG7WWdWgvA

cannot load such file -- sinatra/activerecordのエラーから始まり、しばらくどうしていいか分かりませんでした。

多大なる記事を参考にしましたが、参考にした記事を載せると、「この記事の通りにやっても出来ひんのかーい!」ってなるので、特に分かりやすいなと思った記事を参考に上げさせてもらいます。
記事通りに設定したのに、rakeコマンドでマイグレーションできなかった方に向けた内容です。
*win10を使用しています。

※参考
https://railsgirls-bne.github.io/sinatra-app-guide
https://github.com/janko/sinatra-activerecord

参考にも載せたこちらの記事が体系的にsinatraのアプリを組むのに、詳しく書かれてるかなと思うので、こちらの記事と見比べながら進めます。

まず、何をしたか

sinatraでWebアプリを組む練習をしていました。

http://recipes.sinatrarb.com/p/databases/postgresql-activerecord?#article
こちらのsinatraのreadmeにも記載されていたり、他の記事にも記載されている通り、Gemファイルを作成し、bundle install -(略)でGemファイルを作ってDBの設定だ!ってところでRakeファイルを使い、マイグレーションだってところまで出来てました。

具体的に、何をしたか

1.Sinatraアプリのために、任意のフォルダを作ります。
2.Gemファイルを作成します。bundle installを流します。
3.その他のフォルダ、ファイルを作成します。
4.ymlファイルを作成します。
5.Rakeファイルを作成します。
6.bundle exec rake~ を流します。←ここでcannot load such file -- sinatra/activerecordのエラーが発生 

具体的なコードは、、、

アプリのディレクトリ配下でbundle initを実行し、Gemファイルを作成します。

Gemfile

#Gemfile  

source 'https://rubygems.org'  

gem "sinatra"  
gem "rake"  
gem "sqlite3"  
gem "activerecord" #最近のアップデートでActive Record6がインストールされました。  
gem "sinatra-activerecord"  

これでbundle installすると、sqlite3、rakeコマンド、Active Recordをsinatraのアプリで使用することが出来ます。

アプリのディレクトリ配下で、configフォルダを作成します。
config フォルダ配下に、application.rb と、database.yml を作成します。

config/application.rb

# require gems and classes  
require 'bundler'  
Bundler.require  
$: << File.expand_path('../', __FILE__)  
Dir['./app/**/*.rb'].sort.each { |file| require file }  

# configure sinatra  
set :root, Dir['./app']  
set :public_folder, Proc.new { File.join(root, 'assets') }  
set :erb, :layout => :'layouts/application'  

config/database.yml

sqlite: &sqlite  
  host: 127.0.0.1  
  adapter: sqlite3  

development:  
  <<: *sqlite  
  database: db/development.sqlite3  

production:  
  <<: *sqlite  
  database: db/production.sqlite3  

test:  
  <<: *sqlite  
  database: db/test.sqlite3  

説明は割愛します。

Rakeファイルの作成とRakeコマンド

そして、アプリのディレクトリ配下で、Rakefileを作成します。

Rakefile

#Rakefile  
require './config/application'  
require 'sinatra/activerecord/rake'  

この2行でいいみたいなんです!

記事によると、こういう記述の仕方もありました。

#Rakefile  
require 'sinatra/activerecord'  
require 'sinatra/activerecord/rake'  

この状態で、Rakeコマンドが使えるみたいです。
例えば、この状態でbundle exec rake -Tコマンド(Rakeファイルのタスクの確認)を流すと、Rakeファイルに登録されたのタスクが一覧で出るみたいですが、私の場合、cannot load such file -- sinatra/activerecordのエラーが発生しました。

activerecordにsinatra/activerecordを呼び出す機能がついてるのか思いきや、そうでもないみたいでした。。。
ReadmeやGitHubで他のコードを見ても、これだけの記述のものが多かったので、自分の設定ミスなのかもしれませんが、動かないものは動かない。

もし、この方法だけで出来た方がいればコメントを頂きたいです。

まとめ

次回は解決後のコードを載せます!