【備忘録】Rails Tutorial(第四版 Rails 5.1)のエラー解消例@Windows10【2021年時点】

IT関連

自分は普段Web系の技術とは関わりがあまりないのですが、ある意味IT系に関わっているのもあり、この際Webサイトの作り方くらいは知っておこうとRails Tutorialをやってみることにしました。

プログラミングスクールの中にはこれをやるだけでウン十万も取るようなところもあるようですが、教材は無料で公開されているのでその気になれば一切費用を掛けずにやることも可能です。

そんなわけで少し前(2021/07)に3週間ほどかけてやってみたので、チュートリアルに書かれていないエラーなどの解消メモを備忘録がてら残そうと思います。

なお、Rails 6.0に対応した教材(第6版)は有料だったため、今回取り組んだのはRails 5.1(第4版)です。2021/07現在の各ライブラリの更新状況に合わせ、最低限Rails Tutorial 5.1を完走するのに必要だった追加作業をまとめていく感じになります。また、各問題を解消するにあたって参考にしたサイトがあった場合はそちらも合わせて記載しています。

自分は趣味程度にやってみようと思っただけなのでこれで良いのですが、実際に仕事で使うスキル求める人は第6版を購入して実施した方が良いかと思われます(セキュリティなど、最新版の方が強固になっているはずなので)。

また、Windowsでやってみた系の情報は数が限られているというのもあり、モノ好きな方の一助となればと思い書こうと思います。誤り等あればコメントいただけると幸いです。

今回前提とする環境は下記のとおりです。

  • OS: Windows 10 Home
  • プロセッサ:Intel Core i7-8750H CPU(デュアルコア:2.20GHz, 2.21GHz)
  • RAM: 16GB

また、使用するRubyおよびRailsのバージョンは次の通りです。

  • Ruby: Version 2.7
  • Rails: Version 5.1

ライブラリの問題はほとんどがGemFileの修正になるので、最終的に自分の環境ではこのようになったという情報を先に載せておきます。

source 'https://rubygems.org'

gem 'rails',                   '5.1.6'
gem 'bcrypt',                  '3.1.16'
gem "faker",                   "2.18.0"
gem "carrierwave",             "~> 2.0"
gem "mini_magick",             "4.7.0"
gem "will_paginate",           "3.1.6"
gem "bootstrap-will_paginate", "1.0.0"
gem 'puma',                    '3.9.1'
gem 'sass-rails',              '5.0.6'
gem 'uglifier',                '3.2.0'
gem 'coffee-rails',            '4.2.2'
gem 'jquery-rails',            '4.3.1'
gem 'turbolinks',              '5.0.1'
gem 'jbuilder',                '2.7.0'
gem 'bootstrap-sass',          '3.3.7'

group :development, :test do
  gem 'sqlite3', '1.3.13'
  gem 'byebug',  '9.0.6'
end

group :development do
  gem 'web-console',           '3.5.1'
  gem 'listen',                '3.1.5'
  gem 'spring',                '2.0.2'
  gem 'spring-watcher-listen', '2.0.1'
end

group :test do
  gem 'rails-controller-testing', '1.0.2'
  gem 'minitest',                 '5.10.3'
  gem 'minitest-reporters',       '1.1.14'
  gem 'guard',                    '2.16.2'
  gem 'guard-minitest',           '2.4.4'
end

group :production do
  gem 'pg', '1.2.3' # Rubyのバージョンに合わせて変更
  gem "fog", "1.42"
end

# Windows環境ではtzinfo-dataというgemを含める必要あり
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

各エラーとその解消方法

【2章】db:migrate が上手く動かない場合の対処

1章の内容をAWS Cloud9で始めるのではなくWindows10のローカル環境で行った場合、おそらくrails server を実行した際にエラーが発生し、それを基に検索すると以下の記事に行きつくと思います。

Windows10で「rails server」コマンドを実行したときに「cannot load such file -- sqlite3/sqlite3_native」とエラーが出ることへの対処 - Qiita
はじめに タイトルのとおりのエラーが出ることへの対処法。 対処法はこちらの@jun_mokaさんの記事のとおりです。ありがとうございました m(_ _)m ですので、これは自分用のメモです。 環境 Windows10 R...

sqlite3のロードに失敗するので、それが実行できるように環境を整えるというものです。しかし、この記事に書かれているコマンドをそのまま実行しても、上手く動かない場合があります。特に、2章に入ったとき、rails db:migrate を実行するタイミングで同じエラーに悩まされることになると思います。

この場合、どこを修正するべきか以下に示します。

上記の記事における2番目の手順「sqlite3_naive.soファイルの生成」にて

gem install sqlite3 --platform=ruby -- --with-sqlite3-include=C:/sqlite-amalgamation-3260000 --with-sqlite3-lib=C:\Ruby27-x64\bin

のコマンドを実行する際に「-v “1.3.13”」と、Rubyのsqlite3ライブラリのバージョンを指定する必要があります。また、最後の Ruby27-x64… のところも、使用するRubyのバージョンに合わせる必要があります(これは実際に使用するRubyのバージョンに合わせて変更してください)。

これを実行すると、”C:\Ruby27-x64\lib\ruby\gems\2.7.0\gems\sqlite3-1.3.13\lib\sqlite3\sqlite3_native.so”が生成されているので、これを以下にコピーします。

“C:\Ruby27-x64\lib\ruby\gems\2.7.0\gems\sqlite3-1.3.13-x64-mingw32\lib\sqlite3\2.7”

なお、指定するsqlite3ライブラリのバージョンですが、これはGemfileで指定しているバージョンと同じものを指定すればOKです。今回、自分の環境では次のように指定していました。

# (前略)
group :development, :test do
  gem 'sqlite3', '1.3.13'
  gem 'byebug',  '9.0.6'
end
# (後略)

解決には以下を参照しました。

$ rails db:migrate のエラー(railsチュートリアル)|teratail
railsチュートリアルの第二章をやっています。$ rails generate scaffold User name:string email:string を実行した後の$ rails db:migrate

【6章】has_secure_passwordを使えるようにするまでの道のり

Gemfileに、Tutorial記載の通り
gem ‘bcrypt’, ‘3.1.12’
と書いてbundle install, rails test:modelsを実行すると、以下のエラーが出る

rails aborted!
LoadError: cannot load such file -- bcrypt_ext
C:/Users/"User Name"/Desktop/RailsTutorial/environment/sample_app/config/application.rb:7:in `<top (required)>'
C:/Users/"User Name"/Desktop/RailsTutorial/environment/sample_app/Rakefile:4:in `require_relative'
C:/Users/"User Name"/Desktop/RailsTutorial/environment/sample_app/Rakefile:4:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'

Caused by:
LoadError: cannot load such file -- 2.7/bcrypt_ext
C:/Users/"User Name"/Desktop/RailsTutorial/environment/sample_app/config/application.rb:7:in `<top (required)>'
C:/Users/"User Name"/Desktop/RailsTutorial/environment/sample_app/Rakefile:4:in `require_relative'
C:/Users/"User Name"/Desktop/RailsTutorial/environment/sample_app/Rakefile:4:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
(See full trace by running task with --trace)

解消には結構時間がかかりましたが、結局Gemfileに記載するbcryptライブラリのバージョンが適切でないことが原因だったようです。
Gemfileに記載するバージョンを”3.1.12″から”3.1.16“に変更することで解決しました。

gem 'bcrypt',                  '3.1.16'

その後rails test:modelsを実行すると、test環境でdbをmigrateしろと言われるので、以下のコマンドを実行します。

rails db:migrate RAILS_ENV=test

これを実行したあとで、rails test:modelsとすれば無事テストが走るはずです。

【7章】byebug / debugger が動作しない場合の対応

GemFileの一部を変更する。Tutorial通りの記載をした、動作しない場合のGemFileは次の通り。

# 前略

group :development, :test do
  gem 'sqlite3', '1.3.13'
  gem 'byebug',  '9.0.6', platform: :mri # ← ここが問題
end

# 後略

このplatform: :mriの部分を削除し、以下のようにする。

# 前略

group :development, :test do
  gem 'sqlite3', '1.3.13'
  gem 'byebug',  '9.0.6'
end

# 後略

その後、GemFileと同じ階層に生成されているGemFile.lockというファイルを削除し、再度bundle installを実行することで使用可能になる。

【10章】rails server がローカルで起動できなくなる場合の対応

Tutorialで作業中、rails sコマンドを実行するとエラーが起き、以下のように表示される。

ERROR: worker mode not supported on JRuby or Windows

7章で config/puma.rb を編集するが、その1行目

workers Integer(ENV["WEB_CONCURRENCY"] || 2) 

コメントアウトすることでローカルでも動作する(10章になるまで問題にならなかったのは、ローカルのサーバープロセスをずっと起動していたため?理由は不明)。

この行は、Webサーバーをマルチプロセスで起動することを表していますが、Windowsではマルチプロセスでの起動に対応していないため、コメントアウトする必要があるようです。

以降、デプロイ時・ローカルでのサーバー起動時でその行を有効化・コメントアウトするのを手動で切り替えるという方法しか現状ないようです。面倒ですがWindows環境で実施する場合は仕方ないですね。

【参考URL】

rails sができない(開発環境から本番環境)|teratail
本番環境でwebサーバーをWEBrickからPumaに置き換えたのですが、rails sが出来なくなりました。(herokuを使っています)どうすればrails s が使えるようになるのでしょうか?ご教授お願いします。rails s=> Boo
Deploying Rails Applications with the Puma Web Server | Heroku Dev Center
A guide to using Puma on Heroku. Puma uses threads, in addition to worker processes, to make more use of a systems available CPU.

【10章】faker のバージョン指定について

現時点での最新版にすることで動作した。GemFile記載の内容を次のように変更。

# 前略

gem "faker",        "2.18.0"

# 後略

【faker 公式URL】

faker | RubyGems.org | your community gem host

【10章】rails db:migrate:resetが上手く動作しないことに関して

Windowsではバグのせいで上手く動作しない模様。手動でDBを削除、再度 rails db:migrate を実施することで対処。
※ sample_app/db/development.sqlite3 が対応DBなので、それを削除・再マイグレートという手順になる。

【10章】rails test 実行時に db:migrate RAILS_ENV=test を実行しろと促されるが、それを実行しても改善しない場合

rails test を実行した際に、以下のようにdb:migrate RAILS_ENV=testを実行しろと表示されることがありますが、それを実行しても再度同様のエラーが表示される場合が存在します。

C:\Users\"User Name"\Desktop\RailsTutorial\environment\sample_app>rails test
C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:30: warning: rb_check_safe_obj will be removed in Ruby 3.0
C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:30: warning: rb_check_safe_obj will be removed in Ruby 3.0
Migrations are pending. To resolve this issue, run:

        bin/rails db:migrate RAILS_ENV=test

解決方法についてですが、まず development.sqlite3, test.sqlite3 を手動で削除、Rails の Serverプロセスを起動しているときはそれも停止します(rails sを実行しているコマンドプロンプトを閉じるなどしてプロセスを停止)。

その上で以下のコマンドを順に打ち込むと動作します。要は、再度データベースを作成するということですね

rails db:migrate
rails db:seed
rails db:migrate RAILS_ENV=test
rails test

上手く動作したときのログは以下の通り。

> rails db:migrate RAILS_ENV=test

C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:30: warning: rb_check_safe_obj will be removed in Ruby 3.0
== 20210703125652 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0012s
== 20210703125652 CreateUsers: migrated (0.0023s) =============================

== 20210703155854 AddIndexToUsersEmail: migrating =============================
-- add_index(:users, :email, {:unique=>true})
   -> 0.0014s
== 20210703155854 AddIndexToUsersEmail: migrated (0.0024s) ====================

== 20210704022357 AddPasswordDigestToUsers: migrating =========================
-- add_column(:users, :password_digest, :string)
   -> 0.0016s
== 20210704022357 AddPasswordDigestToUsers: migrated (0.0027s) ================

== 20210705144801 AddRememberDigestToUsers: migrating =========================
-- add_column(:users, :remember_digest, :string)
   -> 0.0012s
== 20210705144801 AddRememberDigestToUsers: migrated (0.0023s) ================

== 20210709155421 AddAdminToUsers: migrating ==================================
-- add_column(:users, :admin, :boolean, {:default=>false})
   -> 0.0012s
== 20210709155421 AddAdminToUsers: migrated (0.0020s) =========================

【11章】アカウントの有効化テストについて

例えば、適当なユーザー作成を試みると
https://localhost:3000/account_activations/uanAGUiWBEax669xIlBgwQ/edit?email=test_hoge%40example.com

にアクセスしろとサーバープロセスのログに表示される。
ただし、これをコピペするとブラウザでは上手く表示できない。「https://」の部分が余計なので、

localhost:3000/account_activations/uanAGUiWBEax669xIlBgwQ/edit?email=test_hoge%40example.com

のようにしてアクセスする必要がある(ローカルで開発する際の注意点)。

【13章】GemFileに画像取り扱いライブラリを追加する際に出る警告

「警告:循環依存が検出されました…」と出るが、問題なくインストールできる。少し時間がかかる(数分)のでそこで止めないこと。

以下は実際のログの例です。

Fetching gem metadata from https://rubygems.org/........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Using rake 13.0.3
Using concurrent-ruby 1.1.9
Using i18n 1.8.10
Using minitest 5.10.3
Using thread_safe 0.3.6
Using tzinfo 1.2.9
Using activesupport 5.1.6
Using builder 3.2.4
Using erubi 1.10.0
Using racc 1.5.2
Using nokogiri 1.11.7 (x64-mingw32)
Using rails-dom-testing 2.0.3
Using crass 1.0.6
Using loofah 2.10.0
Using rails-html-sanitizer 1.3.0
Using actionview 5.1.6
Using rack 2.2.3
Using rack-test 1.1.0
Using actionpack 5.1.6
Using nio4r 2.5.7
Using websocket-extensions 0.1.5
Using websocket-driver 0.6.5
Using actioncable 5.1.6
Using globalid 0.4.2
Using activejob 5.1.6
Using mini_mime 1.1.0
Using mail 2.7.1
Using actionmailer 5.1.6
Using activemodel 5.1.6
Using arel 8.0.0
Using activerecord 5.1.6
Using public_suffix 4.0.6
Using addressable 2.8.0
Using ansi 1.5.0
Using execjs 2.8.1
Using autoprefixer-rails 10.2.5.1
Using bcrypt 3.1.16
Using bindex 0.8.1
Using rb-fsevent 0.11.0
Using ffi 1.15.3 (x64-mingw32)
Using rb-inotify 0.10.1
Using sass-listen 4.0.0
Using sass 3.7.4
Using bootstrap-sass 3.3.7
Using will_paginate 3.1.6
Using bootstrap-will_paginate 1.0.0
Using bundler 2.1.4
Using byebug 9.0.6
Using mini_magick 4.7.0
Fetching ruby-vips 2.1.2
Installing ruby-vips 2.1.2
警告: 循環依存が検出されました:
警告: mingw-w64-x86_64-harfbuzz は依存パッケージ mingw-w64-x86_64-freetype の前にインストールされます
警告: 循環依存が検出されました:
警告: mingw-w64-x86_64-libwebp は依存パッケージ mingw-w64-x86_64-libtiff の前にインストールされます
Fetching image_processing 1.7.1
Installing image_processing 1.7.1
Using marcel 1.0.1
Fetching ssrf_filter 1.0.7
Installing ssrf_filter 1.0.7
Fetching carrierwave 2.2.2
Installing carrierwave 2.2.2
Using coderay 1.1.3
Using coffee-script-source 1.12.2
Using coffee-script 2.4.1
Using method_source 1.0.0
Using thor 1.1.0
Using railties 5.1.6
Using coffee-rails 4.2.2
Using faker 2.18.0
Using formatador 0.3.0
Using ruby_dep 1.5.0
Using listen 3.1.5
Using lumberjack 1.2.8
Using nenv 0.3.0
Using shellany 0.0.1
Using notiffany 0.1.3
Using pry 0.14.1
Using guard 2.16.2
Using guard-compat 1.2.1
Using guard-minitest 2.4.4
Using multi_json 1.15.0
Using jbuilder 2.7.0
Using jquery-rails 4.3.1
Using ruby-progressbar 1.11.0
Using minitest-reporters 1.1.14
Using puma 3.9.1
Using sprockets 3.7.2
Using sprockets-rails 3.2.2
Using rails 5.1.6
Using rails-controller-testing 1.0.2
Using tilt 2.0.10
Using sass-rails 5.0.6
Using spring 2.0.2
Using spring-watcher-listen 2.0.1
Using sqlite3 1.3.13 (x64-mingw32)
Using turbolinks-source 5.2.0
Using turbolinks 5.0.1
Using tzinfo-data 1.2021.1
Using uglifier 3.2.0
Using web-console 3.5.1
Bundle complete! 29 Gemfile dependencies, 93 gems now installed.
Gems in the group production were not installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

【13章】ImageMagicとの連携

ImageMagic ver.7台だとうまく動作しない。
以下のリンクからver.6.x.x台の最新をインストールする(dll.exe → インストーラが起動するので、案内に従ってインストール)

【ImageMagicの公式-ver6以前のアーカイブ】

Index of /ImageMagick/download/binaries

【参考URL】

Windows に ImageMagick バージョン 6.6.3 をインストール(Windows 上にインストール)

【13章】AWS S3との連携

Tutorialそのままでは、内部で接続エラーが発生する(heroku logsで確認)
以下を参考に、config/initializers/carrier_wave.rb に以下の一文を追加して対応

config.fog_public = false

これで本番環境でもアップロードが実行できる。

carrier_wave.rbの中身の全体は下記の通り

if Rails.env.production?
    CarrierWave.configure do |config|
        config.fog_credentials = {
            # AWS S3 用の設定
            :provider               => "AWS",
            :region                 => ENV["S3_REGION"],
            :aws_access_key_id      => ENV["S3_ACCESS_KEY"],
            :aws_secret_access_key  => ENV["S3_SECRET_KEY"]
        }
        config.fog_directory        =  ENV["S3_BUCKET"]
        config.fog_public           =  false # S3アクセスのため追加
    end
end

【参考URL】

[Rails] CarrierWave 経由で AWS S3 にファイルをアップロードする際の設定(ACCESS DENIED の対処) - Qiita
対象者 いろんな記事を見て回って試しているけど、S3からACCESS DENIED がずっと返って来る。 諦めたい そんな人の助けになれば幸いです...!>< 使ったもの Gemfile gem 'ra...

【13章】scss を変更した際に遭遇したエラー

下記のようなエラーが出る場合がある。

Errno::EACCES in StaticPages#home
Permission denied @ rb_file_s_rename - (C:/Users/"User Name"/Desktop/RailsTutorial/environment/sample_app/tmp/cache/assets/sprockets/v3.0/9K/9KRQYKb2a17g9MMHqpxLENlccj6y-KSBSKtpLDyWprQ.cache.19420.14304.482409, C:/Users/"User Name"/Desktop/RailsTutorial/environment/sample_app/tmp/cache/assets/sprockets/v3.0/9K/9KRQYKb2a17g9MMHqpxLENlccj6y-KSBSKtpLDyWprQ.cache)

キャッシュが原因のようで、tmp/assets/cache以下のファイルを全削除することで解消可能。

【参考URL】

Railsのエラー(Errno::EACCES)に関する質問|teratail
railsのto-doアプリ製作が途中だったので再び作業しようと思い、rails serverを起動し、localhost:3000/todo_listsと入力したところ、Errno::EACCESと表示されました。permission deniedとあるので、権限を変更しないと

コメント

タイトルとURLをコピーしました