LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

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

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

まとめ

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

0
0
1

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