Help us understand the problem. What is going on with this article?

【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

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
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で他のコードを見ても、これだけの記述のものが多かったので、自分の設定ミスなのかもしれませんが、動かないものは動かない。

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

まとめ

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

gussan-dayo
どうも~ 関西でエンジニアをしてます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした