はじめに
どうやって私がruby on railsを勉強したのかについて詳しく説明します!
なぜrubyを勉強したのか?
日本でrubyを使うことがあると聞きました。
いつかrubyプロジェクトに出会いそうで勉強を始めました。
rubyを勉強した方法
上リンクにある例をすべて確認しました。
重要なポイントだけ実行しながら勉強しました!
わからないことが出てきたら後で参考にすることにしました。
# variable and operate
num1 = 10
num2 = 20
result = num1 + num2
# print string
puts "result is #{result}"
# if else condition
if result > 10
puts "result > 10"
else
puts "else condition"
end
# loop
# start <= n <= end
for n in 1..5
puts "#{n}"
end
# array (list)
arr = [1, 2, 3]
for n in arr
puts "#{n}"
end
# hash (dict)
hash = Hash[
"a" => 100,
"b" => 200
]
puts "#{hash['a']}"
puts "#{hash['b']}"
# block
def helloworld
puts "hello world"
end
helloworld()
def add(num1, num2)
puts "sum is #{num1 + num2}"
end
add(5,8)
railsを勉強した方法
上リンクにある例を部分的に参考にしました。
railsをインストールする
gem install rails
railsがよくインストールできたのか確認する
rails --version
Rails 6.1.0
プロジェクトを作る
rails new todo
optionを見る
rails s --help
サーバーを実行する
rails s
mysqlを作る
docker-compose.yml
version: '3'
services:
db:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: todo
MYSQL_USER: docker
MYSQL_PASSWORD: docker
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
ports:
- 3306:3306
docker-compose up -d
dockerを利用して簡単にmysqlを作りました:)
勉強しながら出会った最悪の問題
上記のリンクからrubyをダウンロードしました。
ruby --version
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x64-mingw32]
gem --version
3.2.3
最初は全然わからなかったです。
windows10でrubyを使うのはダメだったこと…
mysqlと繋ぐとき問題に出会いました。
問題1
Puma caught this error: Error loading the 'mysql2' Active Record adapter. Missing a gem it depends on? mysql2 is not part of the bundle. Add it to your Gemfile. (LoadError)
問題1解決
Gemfileにしたのコードを追加
gem 'mysql2'
bundle install
問題2
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
...
Cannot find include dir(s)
C:\Users\dev\mysql-connector-c-noinstall-6.0.2-win32/include/include
問題2解決
bundle config --local build.mysql2 "--with-mysql-dir=C:\Users\dev\mysql-connector-c-noinstall-6.0.2-win32"
bundle install
問題3
client.c:1350:38: error: 'MYSQL_DEFAULT_AUTH' undeclared (first use in this
function); did you mean 'MYSQL_SECURE_AUTH'?
1350 | return _mysql_client_options(self, MYSQL_DEFAULT_AUTH, value);
| ^~~~~~~~~~~~~~~~~~
| MYSQL_SECURE_AUTH
問題3解決
Gemfileにしたのコードに修正
gem 'mysql2', '~> 0.4.10'
問題4
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require': cannot load such file -- Win32API (LoadError)
Did you mean? win32/sspi
ここで諦めました…
たくさん調べて分かりましたが
皆WSLを使う事実を分かりました。
ここからはWSLでプログラミングしました
WSLとは?
WSLに関する詳細は上記リンクを参照してください
WSLを利用してruby on railsとmysqlを繋ぎました。
dependencyをインストール
sudo apt-get update
sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev
rbenvをインストール
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenvをセッティング
vi ~/.bashrc
export PATH=$PATH:$HOME/.rbenv/bin
eval "$(rbenv init -)"
source ~/.bashrc
rubyをセッティング
rbenv --version
rbenv install --list
rbenv install 3.0.0
rbenv versions
rbenv global 3.0.0
rbenv versions
db dependencyをインストール
sudo apt-get install libsqlite3-dev
sudo apt install libmysqlclient-dev
Gemfileに下のコードを追加
gem 'mysql2'
bundleをインストール
bundle install
これでmysqlと繋ぐことができました。
一つずつゆっくりプログラミング
htmlをレンダリングするために最初にしなければならないことはcontrollerを作ることでした。
rails generate controller Todo index --skip-routes
htmlレンダリングを確認した後、コードを一生懸命作成しました。
その後、モデルを簡単に作ってmysqlでカラムを修正しました。
rails generate model Todo content:string
rails generate model User username:string
rails db:migrate
contents table
users table
rails session が保存できない問題
GET METHODでsessionを保存してGET METHODでsessionを呼び込んだら作動する。
GET METHODでsessionを保存してPOST METHODでsessionを呼び込んだら作動しない。
sessionがPOST METHODを使うとき保存できない問題の原因
csrf tokenが一致しなければsessionが初期化されることが分かりました。
csrf token問題解決方法
csrf tokenを正常に送る方法が胃リンクで分かりました。
#結果
色んな問題を乗り越えて3日たって完成することができました!!
最初はデザインもダサいです。
機能を作ることに集中しました。
その後bootstrapのbreak pointとspaceを利用して反応型ウェブを作りました。
デザインも修正してtoastrライブラリーも追加しました。
最後にログインを勉強するためにsessionを利用した機能を作りました。
ユーザーを変更するuiはslick.jsを使いました。
github
まとめ
ウェブ勉強の場合TODOを作ると素早くcreate, read, update, deleteを実現することができ効果的です。
私の場合、このような方法で色んな言語やフレームワークを速く経験することができました!