20211123のRailsに関する記事は8件です。

【Railsチュートリアル】プロフィール画像をアプリ内で設定できるように変更

はじめに Railsチュートリアル第6版sample_appにおいて、プロフィール画像にはgravatarが使用されているが、プロフィール画像をアプリ内で設定できるようにしていく。 前提 第6版sample_appが完成している 初期画像を設定 usersテーブルにimage_nameカラムを追加する。 $ rails g migration add_image_name_to_users db/migrate/[timestamp]_add_image_name_to_users.rb class AddImageNameToUsers < ActiveRecord::Migration[6.1] def change add_column :users, :image_name, :string end end $ rails db:migrate 初期画像default_user.jpgをapp/assets/imagesディレクトリ下に用意しておく。 ├ app/ ├ assets/ ├ images/                      └ default_user.jpg ユーザー登録時にimage_nameの値がdefault_user.jpgになるように設定。 app/controllers/users_controller.rb . . . def create @user = User.new(user_params) @user.image_name = "default_user.jpg" if @user.save @user.send_activation_email flash[:info] = "Please check your email to activate your account." redirect_to root_url else render 'new' end end . . . ユーザー編集画面で画像変更を可能にする ユーザー編集のビューを変更する。 このとき、画像をうけつけるためにform_withにmultipart: trueを記述する。 また、今回は画像表示にimage_tagを使用する。 app/views/users/edit.html.erb . . . <%= form_with(model: @user, local: true, multipart: true) do |f| %> . . . <%= image_tag @user.image_name, width: "100px", height: "100px", class:"icon"%> <%= f.label :image, "Icon change" %> <%= f.file_field :image, class: 'form-control' %> <%= f.submit "Save changes", class: "btn btn-primary" %> <% end %> </div> </div> 送信した画像を受け取るためにコントローラーを編集する。 app/controllers/users_controller.rb . . . def update @user = User.find(params[:id]) if params[:user][:image] @user.image_name = "#{@user.id}.jpg" image = params[:user][:image] File.binwrite("app/assets/images/#{@user.image_name}",image.read) end if @user.update(user_params) flash[:success] = "Profile updated" redirect_to @user else render 'edit' end end . . . 以下のようになっていれば成功。 画像を表示する gravatarで表示していたビューをimage_tagに変更していく。 編集するビューは以下。 views/microposts/micropost.html.erb views/shared/_user_info.html.erb views/users/_user.html.erb views/users/edit.html.erb views/users/show_follow.html.erb views/users/show.html.erb 例えば views/microposts/micropost.html.erb <%= link_to gravatar_for(micropost.user, size: 50), micropost.user %> を views/microposts/micropost.html.erb <%= link_to image_tag(micropost.user.image_name, width: "50px", height: "50px", class:"icon"), micropost.user%> というように変更する。 最後にcssを変更する。 自分は画像を丸く表示させたかったので以下のように記述。 app/assets/stylesheets/custom.scss . . . .icon { border-radius: 50%; object-fit: cover; float: left; margin-right: 10px; } 以下のようになっていれば成功。 発生するエラーについて 自分は開発環境にRails×RSpec×Docker×CircleCIを使用しており、開発環境ではうまくいくが、herokuにデプロイ後ユーザー編集画面でプロフィール画像を変更しようとすると、 こちらのエラーが発生する。 ログを見てみるとどうやらアセットパイプラインに関してのエラーが発生しているようであり、production.rbに config/environments/production.rb config.assets.compile = true を追加したりしてみたが改善されなかったため、carrierwaveを用いた方法に変更することにした。 記事はこちら
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Railsチュートリアル】 プロフィール画像をアプリ内で設定できるように変更

はじめに Railsチュートリアル第6版sample_appにおいて、プロフィール画像にはgravatarが使用されているが、プロフィール画像をアプリ内で設定できるようにしていく。 前提 第6版sample_appが完成している 初期画像を設定 usersテーブルにimage_nameカラムを追加する。 $ rails g migration add_image_name_to_users db/migrate/[timestamp]_add_image_name_to_users.rb class AddImageNameToUsers < ActiveRecord::Migration[6.1] def change add_column :users, :image_name, :string end end $ rails db:migrate 初期画像default_user.jpgをapp/assets/imagesディレクトリ下に用意しておく。 ├ app/ ├ assets/ ├ images/                      └ default_user.jpg ユーザー登録時にimage_nameの値がdefault_user.jpgになるように設定。 app/controllers/users_controller.rb . . . def create @user = User.new(user_params) @user.image_name = "default_user.jpg" if @user.save @user.send_activation_email flash[:info] = "Please check your email to activate your account." redirect_to root_url else render 'new' end end . . . ユーザー編集画面で画像変更を可能にする ユーザー編集のビューを変更する。 このとき、画像をうけつけるためにform_withにmultipart: trueを記述する。 また、今回は画像表示にimage_tagを使用する。 app/views/users/edit.html.erb . . . <%= form_with(model: @user, local: true, multipart: true) do |f| %> . . . <%= image_tag @user.image_name, width: "100px", height: "100px", class:"icon"%> <%= f.label :image, "Icon change" %> <%= f.file_field :image, class: 'form-control' %> <%= f.submit "Save changes", class: "btn btn-primary" %> <% end %> </div> </div> 送信した画像を受け取るためにコントローラーを編集する。 app/controllers/users_controller.rb . . . def update @user = User.find(params[:id]) if params[:user][:image] @user.image_name = "#{@user.id}.jpg" image = params[:user][:image] File.binwrite("app/assets/images/#{@user.image_name}",image.read) end if @user.update(user_params) flash[:success] = "Profile updated" redirect_to @user else render 'edit' end end . . . 以下のようになっていれば成功。 画像を表示する gravatarで表示していたビューをimage_tagに変更していく。 編集するビューは以下。 views/microposts/micropost.html.erb views/shared/_user_info.html.erb views/users/_user.html.erb views/users/edit.html.erb views/users/show_follow.html.erb views/users/show.html.erb 例えば views/microposts/micropost.html.erb <%= link_to gravatar_for(micropost.user, size: 50), micropost.user %> を views/microposts/micropost.html.erb <%= link_to image_tag(micropost.user.image_name, width: "50px", height: "50px", class:"icon"), micropost.user%> というように変更する。 最後にcssを変更する。 自分は画像を丸く表示させたかったので以下のように記述。 app/assets/stylesheets/custom.scss . . . .icon { border-radius: 50%; object-fit: cover; float: left; margin-right: 10px; } 以下のようになっていれば成功。 発生するエラーについて 自分は開発環境にRails×RSpec×Docker×CircleCIを使用しており、開発環境ではうまくいくが、herokuにデプロイ後ユーザー編集画面でプロフィール画像を変更しようとすると、 こちらのエラーが発生する。 ログを見てみるとどうやらアセットパイプラインに関してのエラーが発生しているようであり、production.rbに config/environments/production.rb config.assets.compile = true を追加したりしてみたが改善されなかったため、carrierwaveを用いた方法に変更することにした。 記事はこちら
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ActiveRecordクエリメソッドまとめ

はじめに ご覧頂きありがとうございます。 初学者がActiveRecordのクエリメソッドと生成されるSQLと比較しながら、まとめました。 また個々のメソッドの詳しい使い方に関してはRailsドキュメントを参照ください。 find idを指定してレコードを取得 見つからなかった場合は例外(ActiveRecord::RecordNotFound)が発生 User.find(1) # SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 find_by 条件を指定して、レコード1件取得する 見つからなかった場合はnilを返却 User.find_by(id: 1) # SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 first idで昇順に並び替えて、最初の1件を取得 User.first # SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1 last idで降順に並び替えて、最初の1件を取得 User.last # SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC LIMIT 1 exitsts? 条件に合うレコードの有無を確認 見つかった場合はtrue、見つからなかった場合はfalse User.exists?(id:1) # SELECT 1 AS one FROM `users` WHERE `users`.`id` = 1 LIMIT 1 count SQLのcount関数を使用してレコードの個数を取得 User.count # SELECT COUNT(*) FROM `users` average SQLのave関数を使用して平均値を取得 User.average("age") # SELECT AVG(`users`.`age`) FROM `users` maximum SQLのmax関数を使用して最大値を取得 User.maximum("age") # SELECT MAX(`users`.`age`) FROM `users` minimum SQLのmin関数を使用して最小値を取得 User.minimum("age") # SELECT MIN(`users`.`age`) FROM `users` update 条件に合うレコードを更新 User.find(1).update(name: "hoge") # UPDATE `users` SET `users`.`name` = 'hoge', `users`.`updated_at` = '2021-11-23 05:49:40.179370' WHERE `users`.`id` = 1 delete 条件に合うレコードを削除(関連付けられたモデルは削除しない) User.find(1).delete # DELETE FROM `users` WHERE `users`.`id` = 1 destroy 条件に合うレコードを削除(関連付けられたモデルも削除) User.find(1).destroy # DELETE FROM `users` WHERE `users`.`id` = 1 deleteとdestroyの違いは下記を参考 https://qiita.com/kamelo151515/items/0fa7fb15a1d2c1e44db2 https://www.sejuku.net/blog/63480 where SQLのwhere節を作る 重ねがけするとand条件として重なっていく またfind,find_byとは違いActiveRecord_Relationクラスを返す User.where(id: 1) # SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 User.where(id: 1).or(User.where(id: 2)) ## or条件 # SELECT `users`.* FROM `users` WHERE (`users`.`id` = 1 OR `users`.`id` = 2) User.where(id: 1).where(name: "test") ## and条件 # SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 AND `users`.`name` = 'test' find,find_by,whereの違いは下記の記事を参考 https://qiita.com/nakayuu07/items/3d5e2f8784b6f18186f2 order SQLのorder by節をつくる データの並び替える User.all.order(id: "DESC") ##idの降順で並び替え # SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC User.all.order(id: "ASC") ##idの昇順で並び替え # SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC joins join節をつくる テーブルを結合する User.joins(:posts) # SELECT `users`.* FROM `users` INNER JOIN `posts` ON `posts`.`user_id` = `users`.`id` 詳しくは以下の記事を参考 https://qiita.com/yuyasat/items/c2ad37b5a24a58ee3d30 また類似メソッドであるincludes,preloadとの違いは以下を参考 https://qiita.com/k0kubun/items/80c5a5494f53bb88dc58 group group by節をつくる 指定されたキーで集約する User.group(:age) # SELECT `users`.* FROM `users` GROUP BY `users`.`age` limit limit節をつくる 取得個数を指定する User.limit(5) ##5件取得する # SELECT `users`.* FROM `users` LIMIT 5 destinct select節にdistinctを追加する 重複除去する User.distinct(:name) ##名前の重複がないようレコードを取得 # SELECT DISTINCT `users`.* FROM `users` all レコードをすべて取得 whereと同じくActiveRecord_Relationクラスを返す User.all # SELECT `users`.* FROM `users` 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Could not reach host index.rubygems.org. Check your network connection and try again. と言うエラーについて。

Cloud9を使ってrailsチュートリアルを進めているのですが、Could not reach host index.rubygems.org. Check your network connection and try again.と言うエラーについて教えていただきたいです。 発生している問題・エラー $ bundle install $ bundle update などを叩くと Could not reach host index.rubygems.org. Check your network connection and try again. と表示されます。 自分で試したことといえば数分時間をおいてから新しくディレクトリを作り直すことしかできず、(お手上げ)しかし、それでなぜかエラーが表示されなくなり、問題なく先ほどのコードを叩くとinstall されてupdate出来てしまいました。 そこで、なぜ解決できたのか質問させてください。 hostに行けないとエラーが出た場合(Could not reach host index.rubygems.org. )、何をするべきか、networkを確認しろ(Check your network connection and try again. )と出た場合も何を確認して、どう対処するべきかを教えていただけないでしょうか。よろしくお願い致します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ruby on rails tutorial3章を始めたら出てきたThere was insufficient space〜 というエラーの解決方法

やっと3章に突入して意気揚々と進めていくと、 qiita.rb There was an error while trying to write to `/tmp/xxxxxxxxxxxxxxxxxxxx/versions`. There was insufficient space remaining on the device. がこんにちは。 どうやら何かの容量がないということらしい。 そうこうしているうちに、awsのターミナルにコードを入力できなくなる。 ちょwどうするんこれ ま、やる事は2択!消すか、増やすかでしょ。 と言うことで調べてみるとこれらの記事が参考になりそうだったので読み進めました。が、解決できませんでした。 解決方法はいつもシンプル 壁にぶち当たるとモチベーションにデバフかかって睡魔召喚し始めますよね私だけですかw AWS Cloud9 の容量不足を解決する 第3章に入ったら hello_app, toy_app は削除しよう 書いてあるやん! hello_app、toy_appを delete してターミナルを再起動して解決しました。 …解決したと思っていました。続く…
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【オリジナルアプリ】公務員からの転職を考える人のための交流サイト【公務員NEXT】

はじめに 自己紹介 未経験からのエンジニア転職を目指す30代前半の地方公務員です。 3児のパパであり、家事・育児・仕事の合間を縫って、何とか20時間/週の学習時間を確保できているという状況です。(記事執筆時点で学習開始から40週を過ぎたので、総学習時間は約800時間です。) ポートフォリとして、オリジナルアプリが完成したので、これから転職活動を開始します。 この記事の目的 転職活動を開始するにあたって、オリジナルアプリの内容を人の目を意識した形で整理しておきたかったからです。 オリジナルアプリの案に悩んでいる人に向けて、一つの事例として参考になってくれればと思っています。 似た境遇の人の励みになれば、幸いです。(私自身、似た境遇の人が頑張っているところを見るとすごく励みになりました。) オリジナルアプリ「公務員NEXT」について 目次 1.サービスの概要 2.開発経緯 3.使用技術 4.インフラ構成図 5.ER図 6.機能一覧 7.開発にあたって意識した点 8.苦労した点 1.サービスの概要 転職を考える公務員のための交流サイトです。 URL ▶︎ https://www.koumuin-next.com PCからでも、スマホからでもご利用いただけます。 「トップページ」のゲストユーザーでログインするボタンを押していただいたら、ユーザー登録をせずに利用できます。 各相談ページの閲覧のみであれば、ログインをせずに利用できます。 2.開発経緯 自分自身が転職を意識し始めた際に、「公務員から民間企業に転職できるのだろうか」、「家族からは反対されないだろうか」などといった不安が頭によぎり、随分と調べました。 その中で、公務員から民間への転職を考えている人は一定数いること、同じような不安を持っている人がいることを知りました。 結局、転職できるか、できないかは、本人が行動するかどうかですが、周囲に相談しにくいこの問題について、同じ境遇の人と交流ができれば、最初の一歩を踏み出すきっかけにはなると考え、このサービスを開発しました。 3.使用技術 フロントエンド HTML CSS Bootstrap 5.0.0 React(React on Rails 12.3.0) いいねボタン、お気に入りボタン、モーダルウインドウなど、一部機能にReactを使用しています。 後述していますが、いずれもReactでなければならないという理由はありませんでしたが、現在、ニーズのある技術のようなので、今回は自身の成長という観点から部分的に取り入れました。 バックエンド Ruby 2.7.3 Ruby on Rails 6.1.4 MySQL 8.0.26 WEBアプリケーションを作るのであれば、RubyかPHPがオーソドックスな選択肢かと思いますが、Rubyを選択したのは、「日本語のドキュメントが多い」、「一つの言語を習得すれば、別の言語の習得のハードルは、最初ほど高くない」という2点から、学習しやすいものがよいと考えたためです。 インフラ Docker 20.10.7 / docker-compose 1.29.2 (開発環境) AWS ( VPC, EC2, RDS, Route53, ACM ) Nginx 1.20.1 Unicorn 6.0.0 CircleCI 2.1 開発環境にDockerを使用したのは、よくに耳にするからということもありますが、PCの環境を変えることなく、開発できるという点に魅力を感じたからです。今後も、何かしら開発を続けていきたいと考えているので、アプリごとにDockerfileやdocker-compose.ymlに開発環境を残しておけるという点は非常に魅力的でした。 AWSについては、「一般的によく使われている」、「Herokuよりも早い」という情報が多く出てきたため、採用しました。基本的には、無料枠の範囲内での利用ですが、私のアプリでは十分だったと感じています。また、実際にサーバーにアクセスして、あれこれと作業をするのは、学習面からは非常に効果が高かったです。 その他 Git 2.24.3 / GitHub VSCode 4.インフラ構成図 5.ER図 6.機能一覧 ユーザー登録・編集・退会、ログイン・ログアウト ゲストログイン 管理者権限(ユーザー一覧、強制退会、各ユーザーへのメモ、相談・回答の削除) 相談の登録・削除 相談への回答・回答への返信及び削除 相談一覧(Ajaxによるページネーション) キーワード検索 いいね(React) お気に入り(React) 7.開発にあたって意識した点 フロントエンド 一覧のページ送りや投稿ユーザー情報の表示は、ページ遷移によるユーザーのストレスをなくすために、Ajax(非同期通信)で実装しました。 入力フォームや投稿一覧など、繰り返し使用するviewについては、修正時の修正漏れを防ぐなど、保守性を考慮して、partialに切り出しました。 バックエンド 管理者権限を持ったユーザーのみ利用できる管理者画面では、登録ユーザーの確認、強制退会、各登録ユーザーへの管理者用のメモ(例:強制退会させた場合にその旨をメモ)を実装しました。また、反社会的な投稿などがあった場合、管理者ユーザーであれば、各相談ページから削除できるようにするなど、実際の運用を想定した機能を実装しました。 RspecによるテストやRubocopによるコードチェックを導入していましたが、デプロイ前の確認忘れを防ぐため、また毎回のデプロイの手間を省力化するため、CircleCIによる、CI/CDを導入しました。 Rspecによる統合テストでは、不適当な入力を防止するために、正常に動作することのテストだけでなく、不適応な入力があった場合には、エラーとなることもテストを書くようにしていました。 8.苦労した点 もっとも苦労したのは、CircleCIによる自動デプロイの設定です。 トータルで約3週間もかけてしまいました。 時間をかけ過ぎたなというのが、正直なところですが、諦めずにやりきったことは、今後も出くわすであろうエラーとの闘いに向けての価値ある経験となりました。 闘いの一部始終です。 おわりに 今回のオリジナルアプリ作成は、転職活動をするためにというのがきっかけではありますが、以下の2つの観点からも、本当に取り組んでよかったと思っています。 自分の感じた課題を解決する 技術力を向上させる 自分の感じた課題を解決する 「公務員からの転職」という題材は多くの人にとって、興味のないテーマだと思います。 ただし、自分の課題意識から出てきたテーマということもあり、実装にあたっての細かい点(例:ユーザー情報にほしい項目)までこだわることができたので、私のオリジナルアプリとしてはよいテーマになったと思っています。 そして、この考える過程というのが意外と楽しく、初めはただただプログラミングがしたいと思っていましたが、今はどのような仕様がよいかなど、設計まで含めてやってみたいなという気持ちになっています。 技術力を向上させる 一部にReactを取り入れたり、CircleCIによるCI/CD(特に自動デプロイ)の導入をしたりしましたが、今回のオリジナルアプリの作成に必ずしも必要だったというわけではありません。 ただし、基礎学習の段階では、使わなかったこれらの技術を背伸びして取り入れたことで、自身の成長につながったと思います。 実務であれば、時間面やコスト面も考慮して、そのプロジェクトに最適な技術選定をする必要があるかと思いますが、今回は個人開発であったため、自身の成長にもつながるような技術選定をすることができました。 最後になりましたが、ここまで読んでいただき、ありがとうございます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rails×RSpec×Docker×CircleCI

はじめに RailsアプリをDocker上で構築し、CircleCIを用いて、RSpecによる自動テスト、またHerokuへの自動デプロイの仕組みを実現していく。 環境 フレームワーク : Rails テストフレームワーク : RSpec データベース : MySQL コンテナ : Docker(Docker Compose) CI/CDツール : CircleCI サーバー : Heroku 前提 GitHub、Herokuに登録済み Docker、Docker Composeをインストール済み 参考 山浦清透さんのDocker超入門講座 合併版 | ゼロから実践する4時間のフルコースという動画を参考にさせていただく。 Docker環境でRailsアプリを作成 作業用ディレクトリを用意し、必要なファイルを作成する。 今回はqiita-railsというディレクトリ内で作業していく。 qiita-rails/ ├ src/ └ Gemfile ├ docker-compose.yml └ Dockerfile Gemfile source 'https://rubygems.org' gem 'rails', '~> 6.1.4', '>= 6.1.4.1' docker-compose.yml version: '3' services: db: image: mysql:8.0 command: --default-authentication-plugin=mysql_native_password volumes: - ./src/db/mysql_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: password web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - ./src:/app ports: - "3000:3000" environment: RAILS_ENV: development depends_on: - db Dockerfile FROM ruby:2.7 RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ && apt-get update -qq \ && apt-get install -y nodejs yarn \ && apt-get -y install imagemagick WORKDIR /app COPY ./src /app RUN bundle config --local set path 'vendor/bundle' \ && bundle install 作業用ディレクトリに移動後、Railsアプリを作成。 $ docker-compose run rails new . --force --database=mysql Gemfileが更新されたのでコンテナのイメージをビルドし直す。 $ docker-compose build database.ymlのdefaultのpasswordとhostを設定。 src/config/database.yml . . . default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: password host: db . . . データベースを作成する。 $ docker-compose run web rails db:create コンテナを起動する。 $ docker-compose up ブラウザでlocalhost:3000を開き、以下の画面が表示されていれば成功。 Herokuの設定 Heroku、Heroku Container Registryにログインし、アプリを作成。 $ heroku login $ heroku container:login $ heroku create qiita-rails MySQL用のアドオンを追加する(Herokuにクレジットカードの登録が必要)。 $ heroku addons:create cleardb:ignite -a qiita-rails database.ymlのproductionを設定する。 src/config/database.yml . . . production: <<: *default database: <%= ENV['APP_DATABASE'] %> username: <%= ENV['APP_DATABASE_USERNAME'] %> password: <%= ENV['APP_DATABASE_PASSWORD'] %> host: <%= ENV['APP_DATABASE_HOST'] %> $ heroku config -a qiita-rails でこれらの環境変数を確認し $ heroku config:add でそれぞれ設定していく。 作業用ディレクトリに、start.shを追加し、Dockerfileを編集する。 qiita-rails/ ├ src/ ├ docker-compose.yml ├ Dockerfile                     └ start.sh start.sh #!/bin/sh if [ "${RAILS_ENV}" = "production" ] then bundle exec rails assets:precompile fi bundle exec rails s -p ${PORT:-3000} -b 0.0.0.0 Dockerfile FROM ruby:2.7 ENV RAILS_ENV=production RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ && apt-get update -qq \ && apt-get install -y nodejs yarn \ && apt-get -y install imagemagick WORKDIR /app COPY ./src /app RUN bundle config --local set path 'vendor/bundle' \ && bundle install COPY start.sh /start.sh RUN chmod 744 /start.sh CMD ["sh", "/start.sh"] Herokuに環境変数を追加する。 $ heroku config:add RAILS_SERVE_STATIC_FILES='true' -a qiita-rails CircleCIでCI/CDを構築 事前にGitHubにリポジトリを作成しておく。 GemfileにRSpecを追加する。 Gemfile group :development, :test do gem 'rspec-rails' end Gemfileが更新されたのでコンテナのイメージをビルドし直す。 $ docker-compose build 下記ののコマンドでwebコンテナの中に入り、bashが使えるようにるので、 $ docker-compose exec web bash RSpecをインストールする。 $ rails generate rspec:install CircleCIにGitHubでログインする。 作業用ディレクトリに、.circleciディレクトリ、config.ymlを追加する。 qiita-rails/ ├ src/ ├ docker-compose.yml ├ Dockerfile                     ├ start.sh                     └ .circleci/ └ config.yml .circleci/config.yml version: 2.1 orbs: ruby: circleci/ruby@1.1.2 heroku: circleci/heroku@1.2.3 jobs: build: docker: - image: circleci/ruby:2.7 working_directory: ~/qiita-rails/src steps: - checkout: path: ~/qiita-rails - ruby/install-deps test: docker: - image: circleci/ruby:2.7-node - image: circleci/mysql:5.5 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: app_test MYSQL_USER: root environment: BUNDLE_JOBS: "3" BUNDLE_RETRY: "3" APP_DATABASE_HOST: "127.0.0.1" RAILS_ENV: test working_directory: ~/qiita-rails/src steps: - checkout: path: ~/qiita-rails - ruby/install-deps - run: name: Database setup command: bundle exec rails db:migrate - run: name: yarn Install command: yarn install - run: name: webpack command: bundle exec bin/webpack - run: name: Rspec command: bundle exec rspec deploy: docker: - image: circleci/ruby:2.7 steps: - checkout - setup_remote_docker: version: 19.03.13 - heroku/install - run: name: heroku login command: heroku container:login - run: name: push docker image command: heroku container:push web -a $HEROKU_APP_NAME - run: name: release docker image command: heroku container:release web -a $HEROKU_APP_NAME - run: name: database setup command: heroku run bundle exec rake db:migrate RAILS_ENV=production -a $HEROKU_APP_NAME workflows: version: 2 build_test_and_deploy: jobs: - build - test: requires: - build - deploy: requires: - test filters: branches: only: main database.ymlのtestを設定する。 src/config/database.yml . . . test: <<: *default database: app_test host: <%= ENV.fetch('APP_DATABASE_HOST') { 'db' } %> . . . $ heroku config:add でmaster.keyの値をHerokuの環境変数RAILS_MASTER_KEYとして追加する。 CicleCIのサイトにログイン後、Projects→qiita-rails→Project Settings→Environment Variables→Add Environment Variablesと進み、 Name:HEROKU_APP_NAME, Value:qiita-rails Name:HEROKU_API_KEY, Value:(HerokuのサイトでAccount settingsから確認) を追加する。 最後に これで、gitにpush後GitHub上でCreate pull requestを行うと自動でRSpecによるテストが開始し、それが成功するとMerge pull requestが押せるようになり、Merge pull requestを実行するとまた自動でRSpecによるテストが開始し、それが成功すると自動でHerokuにデプロイされるという仕組みを実現することができた。 いずれサーバー環境をHerokuからAWSに切り替えようと考えている。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ruby on RailsでAPI認証(devise_token_auth)

コマンドメモ $ rails new project1 --api $ cd project1 $ rake db:create $ (Gemfileを更新する) $ bundle install $ spring stop ←止めないと次のコマンドが止まる場合があった $ rails g devise:install ←ごちゃごちゃ言われるけど気にせず次に行く $ rails g devise_token_auth:install User auth $ (migrationファイルを更新する。confirmナントカはコメントアウト、indexのところも含めて) $ rake db:migrate
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む