20210727のRubyに関する記事は12件です。

【Rails】Rspec 3.5からはrails-controller-testingは使わないほうが良いらしい

RSpec 3.5からはrequest specsを使う Rspec3.5(リリースされたのは2016年のかなり前ですが)からは「rails-controller-testing」ではなくて「request specs」を使うようにした方が良いらしいです。 For new Rails apps: we don't recommend adding the rails-controller-testing gem to your application. The official recommendation of the Rails team and the RSpec core team is to write request specs instead. Request specs allow you to focus on a single controller action, but unlike controller tests involve the router, the middleware stack, and both rack requests and responses. 引用:「RSpec 3.5 has been released!」 request specs 公式ドキュメントに記載されたコードを記載しておきます。 spec/requests/widget_management_spec.rb require "rails_helper" RSpec.describe "Widget management", :type => :request do it "creates a Widget and redirects to the Widget's page" do get "/widgets/new" expect(response).to render_template(:new) post "/widgets", :params => { :widget => {:name => "My Widget"} } expect(response).to redirect_to(assigns(:widget)) follow_redirect! expect(response).to render_template(:show) expect(response.body).to include("Widget was successfully created.") end it "does not render a different template" do get "/widgets/new" expect(response).to_not render_template(:show) end end spec/requests/に.specファイルを記載します。細かい使い方などはまた別途記事を更新します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

eachを使うと情報が全部表示される

はじめに コメント機能を実装しました。 しかし何故かDBの情報が全部表示されてしまいます。 すごい凡ミスだったのですが投稿します。 現在の記述 <%= form_with(model: [@review, @comment], local: true) do |f| %> <%= f.text_area :content %> <%= f.submit "コメントする", class: "btn btn-outline-info" %> <% end %> <%= @comments.each do |comment| %> #コメント一覧を表示 <%= comment.user.nickname %> #コメントしたユーザー名表示 <%= comment.content %> #コメント表示 <%= time_ago_in_words(comment.created_at) %>前にコメント  #コメントした時間表示 <% end %> コメントする前から最初から[]があったでおかしいとは思ってました。 結論 <%= @comments.each do |comment| %>  こいつに問題がありました。 これは表示されてはいけないので<% %>このように記述しなけらばなりません。 なので以下のように記述します。 <% @comments.each do |comment| %> 
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

エラー発生(未解決)→解決!!

はじめに エラーが解決せず、12時間が経ちました。 一体何が悪いかさっぱり分かりません。 もう永久にブラウザが表示されないのではないかと思っています。 過去にこんなことがあったんだということを忘れないためにも、 備忘録として残します。 コード routes.rb Rails.application.routes.draw do devise_for :users get 'prototypes/index' root to: "prototypes#index" resources :prototypes end prototypes_controller.rb class PrototypesController < ApplicationController def index @prototypes = Prototype.all end def new @prototype = Prototype.new end def create @prototype = Prototype.new(prototype_params) if @prototype.save redirect_to root_path else render :new end end private def prototype_params params.require(:prototype).permit(:title, :catch_copy, :concept, :image ).merge(user_id: current_user.id) end end index.html.erb <main class="main"> <div class="inner"> <% if user_signed_in? %> <div class="greeting"> <%= "こんにちは、" %> <%= link_to "#{current_user.name}さん", root_path, class: :greeting__link%> </div> <% end %> <div class="card__wrapper"> <%= render partial: 'prototype', collection: @prototypes %> </div> </div> </main> _prototypes.html.erb <div class="card"> <%= image_tag "プロトタイプの画像", root_path, class: :card__img%> <div class="card__body"> <%= link_to "プロトタイプのタイトル", root_path, class: :card__title%> <p class="card__summary"> <%= "プロトタイプのキャッチコピー" %> </p> <%= link_to "by プロトタイプの投稿者名", root_path, class: :card__user %> </div> </div> ここが間違いではないか _prototypes.html.erbの <%= image_tag "プロトタイプの画像", root_path, class: :card__img%> が間違いだと思う。 しかし、image_tagとlink_toの記述の違いがわからない。 ここから復習します。 終わりに 今回は完全に私事で記事を書いてしまいました。 この問題が明日に、 未解決→解決にできるよう精一杯エラーと向き合います。 まずは落ち着いて、リフレッシュしながら頑張ります。 追記 案の定、以下が間違いでした!! (誤) <%= image_tag "プロトタイプの画像", root_path, class: :card__img%> (正) <%= link_to image_tag(prototype.image, class: "card__img" ), prototype_path(prototype.id) %> エラー解決!! 気持ちいい!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

エラー発生(未解決)①

はじめに エラーが解決せず、12時間が経ちました。 一体何が悪いかさっぱり分かりません。 もう永久にブラウザが表示されないのではないかと思っています。 過去にこんなことがあったんだということを忘れないためにも、 備忘録として残します。 コード routes.rb Rails.application.routes.draw do devise_for :users get 'prototypes/index' root to: "prototypes#index" resources :prototypes end prototypes_controller.rb class PrototypesController < ApplicationController def index @prototypes = Prototype.all end def new @prototype = Prototype.new end def create @prototype = Prototype.new(prototype_params) if @prototype.save redirect_to root_path else render :new end end private def prototype_params params.require(:prototype).permit(:title, :catch_copy, :concept, :image ).merge(user_id: current_user.id) end end index.html.erb <main class="main"> <div class="inner"> <% if user_signed_in? %> <div class="greeting"> <%= "こんにちは、" %> <%= link_to "#{current_user.name}さん", root_path, class: :greeting__link%> </div> <% end %> <div class="card__wrapper"> <%= render partial: 'prototype', collection: @prototypes %> </div> </div> </main> _prototypes.html.erb <div class="card"> <%= image_tag "プロトタイプの画像", root_path, class: :card__img%> <div class="card__body"> <%= link_to "プロトタイプのタイトル", root_path, class: :card__title%> <p class="card__summary"> <%= "プロトタイプのキャッチコピー" %> </p> <%= link_to "by プロトタイプの投稿者名", root_path, class: :card__user %> </div> </div> ここが間違いではないか _prototypes.html.erbの <%= image_tag "プロトタイプの画像", root_path, class: :card__img%> が間違いだと思う。 しかし、image_tagとlink_toの記述の違いがわからない。 ここから復習します。 終わりに 今回は完全に私事で記事を書いてしまいました。 この問題が明日に、 未解決→解決にできるよう精一杯エラーと向き合います。 まずは落ち着いて、リフレッシュしながら頑張ります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gem fog-awsを使用して画像アップロード機能を実装しようとしてハマった話

起こった出来事 現在作成しているアプリで画像アップロード機能を実装しようと思い、fog-aws carrierwave を組み合わせてS3にアップロードしようと思ったところでかなりの時間を消費していましたが無事に解決できましたので、それまでの過程を備忘録として記入したいと思います。 そもそも何故ダメだったのか argumenterror ( is not a recognized provider):`というエラーが出ており、そもそもプロバイダー自体が読み込めていないと判断し carriewave.rbとimage-uploder.rbでaws設定関連の記述ミスや環境変数がちゃんと適用されてるか、バケット名が間違えてないかなど思い当たるところは片っぱしから調べましたが全部あっており、完全にわからない状態でした。 carriewave.rb require 'carrierwave/storage/abstract' require 'carrierwave/storage/file' require 'carrierwave/storage/fog' CarrierWave.configure do |config| case Rails.env when 'development', 'test' config.storage = :file config.cache_storage = :file else config.fog_credentials = { provider: 'AWS', aws_access_key_id: Rails.application.credentials.aws[:access_key_id], aws_secret_access_key: Rails.application.credentials.aws[:secret_access_key], region: 'ap-northeast-1', } config.fog_provider = 'fog/aws' config.storage :fog config.cache_storage = :fog config.fog_directory = 'バケット名' config.fog_public = false end end image-uploder.rb class ImageUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick if Rails.env.production? storage :fog else storage :file end def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def default_url(*_args) '/images/' + [version_name, 'default.png'].compact.join('_') end version :thumb do process resize_to_fit: [128, 128] end version :medium do process resize_to_fit: [360, 360] end def extension_whitelist %w[jpg jpeg gif png] end end 解決策 しかし見落としがありました、私が参考にしたサイトには記述されていませんでしたが config.asset_host = "https://s3.ap-northeast-1.amazonaws.com/バケット名" この記述をcarriewave.rbに書いているサイトがあり、まさかと思い試しに追記してみたらこれが動くんですよね。 carriewave.rb require 'carrierwave/storage/abstract' require 'carrierwave/storage/file' require 'carrierwave/storage/fog' CarrierWave.configure do |config| case Rails.env when 'development', 'test' config.storage = :file config.cache_storage = :file else config.fog_credentials = { provider: 'AWS', aws_access_key_id: Rails.application.credentials.aws[:access_key_id], aws_secret_access_key: Rails.application.credentials.aws[:secret_access_key], region: 'ap-northeast-1', } config.fog_provider = 'fog/aws' config.storage :fog config.cache_storage = :fog:    config.asset_host = "https://s3.ap-northeast-1.amazonaws.com/バケット名" config.fog_directory = 'バケット名' config.fog_public = false end end 以上です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Association namedエラーで彷徨った話

起こった出来事 現在作成中のアプリでマイプロフィールから今までにブックマークした投稿を一覧表示されるページを作成しrails sしてブラウザからのアクセスを試みたところ下禁輸のようなエラーが出てしばらく時間を使ってしまいました。 Association named 'game' was not found on Bookmark; perhaps you misspelled it? 対処方法 こちらはエラー内容の通りアソシエーションがで定義されておらず、gameとのアソシエーションをbookmarkモデルで見つけることができなかったという内容です。 なので該当のモデルを確認してみましたらところ、 bookmark.rb class Bookmark < ApplicationRecord class Bookmark < ApplicationRecord validates :user_id, presence: true validates :game_id, presence: true belongs_to :user belongs_to :game end end という風に何故かclassを二重にしてたのが原因でした。 このように直したら正常に動作しました。 bookmark.rb class Bookmark < ApplicationRecord validates :user_id, presence: true validates :game_id, presence: true belongs_to :user belongs_to :game end 以上です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】『エクササイズを楽しく継続したい』をテーマに、ポートフォリオを作成してみた

1.はじめに はじめまして。閲覧いただきありがとうございます。 今回作成したアプリについて、工夫・苦労したところ、各機能についてご紹介していければと思います。 2.アプリの特徴 『エクササイズ(運動)を楽しく継続したい』をテーマにしたSNS型記録アプリです。 基本的にはtwitterのような投稿、コメント、いいね、フォロー機能のあるSNSですが、その他に以下のような特徴のあるアプリです。 ユーザー別に、目標設定・編集できる ユーザー別に、好きなエクササイズを登録・編集・削除ができる エクササイズ合計時間によって、レベルがアップしていく レベルが上位3名になると、ランキングにユーザー名とレベルがのる 3.アプリ作成背景 ①課題 日頃の運動不足に加えて、最近はこんなご時世なので、気軽に外に出れないから、家で過ごす方が多くなったため、さらに運動不足を感じています。 運動には、心身ともに良い効果があると理解できていますが、モチベーションを維持できない原因を以下にまとめました。 ① 楽しくない ② すぐに効果がでないため 達成感がない 長期で取り組む必要がある ②目的 アプリを用いて、「楽しく運動を継続できる仕組み」づくりを行い、課題を解決する ③解決方法 「楽しく運動を継続できる仕組み」という方向性で、解決法を考えてみました。 ① 楽しくない 日々の頑張りを共有できる「投稿機能」 一緒に運動を頑張る仲間をつくれる「フォロー機能」 仲間と励まし合うことができる「いいね・コメント機能」 レベルがUPする楽しさ「レベル機能」 ② すぐに効果がでない 達成感を感じていただくため、目標を設定できる「目標設定機能」 長期でモチベーション維持できる「レベル・ランキング表示機能」 そして、私と同じ様に、「健康のために毎日運動をしたいけど、継続できない」悩みを抱えている方は、少なからずいるのではないかと考えました。 そのような考えから、『Tumieku』を開発しました。 (「ツミエク」と呼びます。”エクササイズを積み上げる”ので、コレにしました。) 4.使用技術 言語:Ruby (2.7.2) フレームワーク:Ruby on Rails (6.1.3.2) フロントエンド:HTML&CSS/Bootstrap/JavaScript/jQuey DB:PostgreSQL テスト:Rspec インフラ:Heroku(ステージング環境→本番環境)+AWS(S3) ソースコード管理:GitHub(Projectsのカンバン方式でタスクを管理) その他使用ツール&素材等 Visual Studio Code draw.io unDraw(イラスト素材) Color Hunt(カラーパレットツール) Material Design Icon(アイコン) ロゴメーカー / STORES(ロゴ) 5.ER設計 6.機能一覧 Tumiekuにつけたすべての機能は、以下の16機能です。 機能 Gem ① ログイン・ログアウト機能 devise ② アカウント登録、プロフィール編集機能 devise ③ ゲストログイン機能 ☓ ④ 目標登録・編集機能 ☓ ⑤ いいね機能(Ajax) ☓ ⑥ コメント機能 ☓ ⑦ 投稿機能(CRUD) ☓ ⑧ エクササイズ登録機能(CRUD) ☓ ⑨ フォロー機能 ☓ ⑩ ページネーション機能 kaminari ⑪ レベルアップ機能 ☓ ⑫ ランキング機能 ☓ ⑬ 画像アップロード機能 carrierwave ⑭ フラッシュメッセージ表示機能 ☓ ⑮ レスポンシブ対応 Bootstrap ⑯ Rspecテスト実装 rspec-rails / factory_bot_rails / faker 7.ポートフォリオのURL URL:https://tumieku-app.herokuapp.com ホーム画面・ヘッダーから、ゲストログインボタンで簡単にログインできます。(その他、アカウント登録・ログイン画面でもゲストログインが可能です。) 8.アプリの使用イメージ ①ホーム画面 ホーム画面に、アプリの特徴をまとめています。 ヘッダーのロゴ(Tumieku)を押すとホーム画面へリダイレクト。 トップへ戻るアイコンも設置しています。 ②マイページ(目標・レベル表示) アイコン(①)の編集から、目標とアカウントの編集ができます。 エクササイズの合計時間によって、レベルアップしていきます。 アカウント登録時に、プロフィール画像を設定していない場合は、デフォルト画像を表示しています。 自身の過去の投稿がみれます。 3件以上の投稿となると、ページネーションし見やすくしています。 ③エクササイズ登録画面 自身の取り組みたいエクササイズを登録できます。 登録したエクササイズは、一覧表示から編集・削除ができます。 編集・削除は、ログイン中のuser.idとexerciseのuseer.idが一致していないと、編集・削除のアイコンが表示されないようにしています。 ④投稿ページ(今日のTumieku) ヘッダーの「今日のTumieku」から、投稿画面へ移動します。 日付は、カレンダーをクリックで選択できます。 登録したエクササイズを選択し、実施時間と感想を入力できます。 ⑤投稿一覧とランキング機能 各ユーザーの投稿一覧画面になります。 レベルが上位3名になると、ランキングにユーザー名とレベルがのります。ランキングにのるのは、楽しいですよね。モチベーション上がります!同率順位の場合も表示されます。 ⑥投稿詳細、コメント一覧 投稿に対して、アイコン①又は②から、コメントを投稿できます。 ログイン中のuser.idとcommentのuseer.idが一致していないと、削除のアイコンが表示されないようにしています。 ⑦いいね機能(Ajax) 非同期で、いいね選択・解除ができます。 いいねの数もカウントされます。 ⑧レスポンシブ対応 スマートフォンユーザーへも対応しています。 デバイスによって、ハンバーガーメニューも実装しています。 9.工夫したこと ①チーム開発を意識 実務でのチーム開発を想定した開発を行いました。 ① Git, GitHubを用いたソース管理 ② Projects のカンバン方式でタスクを管理 ③ ブランチ運用は、Gitflowを採用し、プルリクベースで開発 ブランチ名 本番用 備考 master 本番用 本番リリース用のブランチ develop 開発用 機能実装用のブランチはここから切る feature 機能実装用 派生元は develop ブランチ release リリース用 develop ブランチから分岐、タグ付けを行う ②ゲストユーザーは、編集・削除できないように設定 下記のように設定し、誤って「更新」や「削除」をクリックしても、フラッシュメッセージが表示され、ホーム画面にリダイレクトされるようにしました。 routes.rb Rails.application.routes.draw do root 'homes#index' devise_for :user, controllers: { registrations: 'users/registrations' } (略) end app/controllers/users/registrations_controller.rb class Users::RegistrationsController < Devise::RegistrationsController before_action :ensure_normal_user, only: %i[update destroy] def ensure_normal_user if resource.email == "guest@example.com" redirect_to root_path, alert: "ゲストユーザーの更新・削除はできません。" end end end ③UI/UX 視覚で直感的にわかりやすいように、アイコンやロゴを積極的に使用し、シンプルにしました。 アプリのカラーは、TumiekuがSNS的な要素を持ち、「人との繋がり」「励まし合い」といった要素も含むため、メインカラ−のオレンジに設定。 統一感をだすため、下記の配色を参考にデザインしました。 10.苦労したところ フロントエンド UI/UXの調整(Bootstrap) レスポンシブ対応 基本BootstrapのGridsystemを利用しましたが、レスポンシブすると崩れたり、ホーム画面端に謎の余白ができてしまい、原因を探して改善するのに苦労しました。 バックエンド レベルアップ機能 ランキング機能 コメント削除機能(【Rails】コメント削除機能の実装(備忘録)) Rspecでのテスト全般(【RSpec】リクエストスペック実装(備忘録)) コメント削除機能とRspecでのテストで詰まったところは、アプトプットとしてQiita記事に詳細をまとめました。レベルアップ機能とランキング機能のロジックは、一番悩みました。 特に、ランキング機能での、ユーザーのレベルを取得して、同率順位も含めてViewで表示するのに苦労しました。もっと読みやすいコードに改善できればと考えています。 11.開発で意識したこと ①エラー解決に対して 実務に入ったときに先輩社員や上司の時間を無駄に奪うことにならないように まずは、下記の順番にそって自分の力で解決することを意識しました。 ① エラーメッセージやログをよく読む ② エラー文から、どの段階でエラーが出ているか考える ③ bindnig.pry でデバッグする ④ エラー内容を検索する(できるだけ一次情報から読み解くことを意識) ⑤ どうしても解決できなければメンターの方へ質問する 質問する場合は、下記の2つを実施。 質問する前に、コミュニティ内で同じような質問がないか検索し、似た内容は参考にする 質問して学んだことは、Qiita等へアウトプットし同じエラーが起こっても、今度は自分で解決できるようにする ②質問の仕方 Slackを使って、以下の構成で質問していました。 なるべく少ないやり取りで済み、相手の人の時間を無駄に奪わない内容にすることを意識しました。 ① 何をしたいのかを明確に記載する ② 試したこと(コード・参考記事も一緒に添付) ③ どこで詰まっているのか(エラーメッセージ) →メンターの方から意見を頂いたところで、わからない所は恥ずかしがらず即確認する。(わかったふりをして進めると、メンターの方の時間を奪ってしまうため。) 「質問しないこと=自走力」と勘違いしがちですが、実務において1人でずっと悩み続けることはかえって損失になってしまうと思うので、 上記の方法である程度(30~40分)自力で解決できなかった場合には、端的かつ過不足ない内容で質問することで、時間的な損失を最小限にすることを心がけていきたいと思います。 12.今後の課題 AWSへデプロイ デザイン面の改善 「いいね」通知機能 テストコードの充実 検索機能(キーワード検索) ログイン後のリダイレクト先変更 ログイン時、毎日1日1回ランダムに一言表示 パスワード忘れた場合のパスワード再発行機能 エクササイズ積み上げ記録(Chart.js使用して、グラフで表示) TwitterAPIの導入(アプリのつぶやき内容をTwitterへ投稿できる) まだ課題も多いですが、一つずつ改善してよりブラッシュアップしていきたく思います。 長い記事になってしまいましたが、ここまで読んでくださりありがとうございました!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Docker】Quickstart : Compose and Rails やってみた

概要 DockerでRails5に対応したRuby on Railsの環境構築を行いました。 このクィックスタートでは Docker Compose を使って、 簡単な Rails/PostgreSQL アプリを設定することができます。 学んだ一連の流れをまとめておきます。 (一番下にDockerのコマンド一覧も掲載しております!) 前提としてDockerとcomposeのインストールができている状態とします。 まだの人はこちらを参考にして下さい。 ・【図解】Dockerの全体像を理解する -前編- ・いまさらだけどDockerに入門したので分かりやすくまとめてみた ・【入門】はじめての Docker Desktop for Mac のインストールと CentOS の仮想環境構築のセットアップ 環境 ・MacOS Apple M1 バージョン11.4 ・Docker 20.10.7 ・Ruby 2.5.9 ・Rails 5.2.6 ー参考資料ー ・公式ドキュメントQuickstart: Compose and Rails ・クィックスタート: Compose と Rails ・DockerのQuickstart:Compose and Railsをやってみた 手順 インストールができている確認 docker % docker version Client: Cloud integration: 1.0.17 Version: 20.10.7 API version: 1.41 Go version: go1.16.4 Git commit: f0df350 Built: Wed Jun 2 11:56:23 2021 OS/Arch: darwin/arm64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.7 API version: 1.41 (minimum version 1.12) Go version: go1.13.15 Git commit: b0f5bc3 Built: Wed Jun 2 11:55:36 2021 OS/Arch: linux/arm64 Experimental: false containerd: Version: 1.4.6 GitCommit: d71fcd7d8303cbf684402823e425e9dd2e99285d runc: Version: 1.0.0-rc95 GitCommit: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7 docker-init: Version: 0.19.0 GitCommit: de40ad0 dockercompose % docker compose Docker Compose version v2.0.0-beta.6 Dockerを使ったRuby on Railsの環境構築 Dockerとcomposeのインストールが完了したのでDockerを用いたRuby on Railsの環境構築を行います。 DockerでRuby on Railsの環境を構築するプロジェクトのディレクトリを作成し移動します。 今回はmyappとします。 % cd myapp 4つのファイルを準備 ⑴ docker-compose.yml ⑵ Dockerfile ⑶ Gemfile ⑷ Gemfile.lock ⑴ docker-compose.yml docker-compose.ymlというファイル名をVScodeに作成します。 以下を記述↓↓ docker-compose.yml version: '3' services: db: image: postgres environment: - POSTGRES_PASSWORD=password web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" depends_on: - db ⑵ Dockerfile 次に、Dockerfileというファイル名をVScodeに作成します。 以下を記述↓↓ Dockerfile FROM ruby:2.5 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN mkdir /myapp WORKDIR /myapp ADD Gemfile /myapp/Gemfile ADD Gemfile.lock /myapp/Gemfile.lock RUN bundle install ADD . /myapp これでDockerを動かす記述が完了しました。 ⑶ Gemfile 次に、Gemfileというファイル名をVScodeに作成します。 以下を記述↓↓ Gemfile source 'https://rubygems.org' gem 'rails', '5.2.6' ⑷ Gemfile.lock 次に、Gemfile.lockというファイル名をVScodeに作成します。 この時、Gemfile.lockは空にしておきます。 Gemfile.lock # 記述なし これで4つのファイルの作成が完了しました。 上記4つのファイルを作ったうえで、コマンドをうっていきます。 % docker-compose build これでDockerfileのファイル内の記述を実行します。 次に以下のコマンドでrails new をします。 % docker-compose run web rails new . --force --database=postgresql これでダウンロードが完了したら、次にGemfileが更新されたので 再度以下のコマンドを実行します。 % docker-compose build Ruby on RailsのDB設定 config/database.yml を以下に書き換えます。 config/database.yml default: &default adapter: postgresql encoding: unicode host: db username: postgres password: password pool: 5 development: <<: *default database: myapp_development test: <<: *default database: myapp_test production: <<: *default database: myapp_production username: myapp password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %> DBを作成 次に書き換えたDBを作成します。 % docker-compose run web rails db:create コンテナを起動 最後にコンテナを起動させます。 % docker-compose up http://localhost:3000/ にアクセスします。 この画面が出てきたら成功です! これでDockerでRuby on Railsの環境構築が完了です! 簡単な Rails/PostgreSQL アプリを設定することができました! 以下はDokerの開発に必要なコマンド一覧を残しておきます。 Dockerで使用するコマンド一覧 コマンド 動作 補足 docker ps   稼働コンテナの一覧表示 docker ps -a すべてのコンテナを表示 docker run コンテナの生成/起動 docker stats コンテナの稼働確認 docker start コンテナの起動 docker stop コンテナの停止 docker restart コンテナの再起動 docker rm コンテナの削除 docker pause コンテナの中断/再開 docker version   Dockerのバージョン確認 docker info Dockerの実行環境確認 docker commit コンテナからイメージ作成 docker save イメージの保存 docker build -t DockerfileからDockerイメージの作成 docker ls   ファイル変更 docker images ファイル変更 docker ps   ファイル変更 docker ps   ファイル変更 docker ps   ファイル変更 docker ps   ファイル変更 以上となります。 Dockerコマンドはまだまだたくさんあります。 今後、Dockerの開発が進むにつれて、都度更新していきます。 学習頑張っていきましょう!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Rails]seedファイル使い方

今回はRailsで開発を行っていく中で、便利な機能seedファイルの使い方について解説していきます。 きっと便利に開発を進められるので、参考にしてみてください。 seedファイルとは 開発段階のデータ作成方法として、実際にcreate機能を実装してからアプリを操作してデータを作る方法やrails cからデータを作成する方法などがありますが、どちらも大量のデータを作ろうとすると正直めんどくさいです。。 そこで使われるのがseedファイルです。 seedファイルのメリットとして、 開発段階で動作確認用に初期データを入れられる データベースをリセットしても、seedファイルに入っている初期データは再び使える 一度に大量のデータを作成できる というメリットがありますので、開発するときに便利なので、知っておいて損のない機能となってます。 初期データとして管理者のデータも入れられるので、管理者が必須なアプリの場合は、使う場合が多いです。 初期データ作成 では、実際に初期データを作っていきます。 seedファイルはデフォルトで搭載されていて、dbディレクトリ直下のseeds.rbにコードを記述していきます。 db/seeds.rb # Postモデルのデータを作る Post.create!( content: "てすとほげ", user_id: 1 ) これで、Postモデルのcontentカラムが「てすとほげ」、user_idが1のデータが作成できます。 記述できたらデータベースに反映させます。 $ rails db:seed コマンド実行後、rails cで確認してみましょう。 $ rails c 001 > Post.all : 作成したデータが確認できたら、反映できています。 複数のデータを作成 1つのデータを作成することができましたので、複数のデータを作りたいときはこの記述を何個も作っていったらいいのね、、、 db/seeds.rb # Postモデルのデータを作る Post.create!( content: "てすとほげ", user_id: 1 ) Post.create!( content: "てすとほげ2", user_id: 1 ) Post.create!( content: "てすとほげ3", user_id: 1 ) : とてもDRYなコードとは言えないですよね 複数のデータを作りたいときは、timesメソッドを使うと一括でデータが作成できます。 db/seeds.rb # 一括で10個のユーザーデータを作成 # 10回繰り返し処理を行う 10.times do |n| User.create!( # n + 1で数字が重複しないようにする email: "test#{n + 1}@test.com", name: "テストユーザー#{n + 1}", password: "testhoge" ) end これで、userが10個作成できます。 バリデーションでユニークを指定している場合はn + 1でデータが重複しないようにしておきます。 では、データベースを反映させて、rails cで確認してみてください。 $ rails db:seed $ rails c 001 > User.all : データベースのリセット方法 今あるデータを削除して初期データを入れたいなど、データベースをリセットしたい場合の処理をお伝えしておきます。 データベースをリセットする場合は、以下のコマンドを実行します。 $ rails db:migrate:reset これで、データベースがリセットされたので、seedファイルの初期データを投入していきます。 rails db:seed これで、記述していた初期データが反映されました。 まとめ seedファイルは、管理者や一括でデータを入れたい場合に非常に便利な機能です。 seedファイルをうまく使って、開発を進めていきましょう!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

form_withについて学んだこと

フォームを記述する際にhtmlとrailsでヘルパーメソッドを使って記述した場合の違いをまとめてみた。 <form aciton="/posts" method="post"> <input type="text" name="content"> <input type="submit" value="送信"> </form> action="/posts"localhost:3000/postsへ記載内容をリクエストする method="post" httpメソッドでpostを指定 type="text"1行のテキストボックスを作る name="content"contentという名前を指定している type="submit" フォームを実行するボタンを作る value="送信" 「送信」という初期値を入力する <%= form_with url:"/posts", method: :post, local: true do |form| %> <%= form.text_field :content %> <%= form.submit '送信' %> <% end %> method: :posthttpメソッドでpostを指定。初期値は:postなので、postメソッドを使う場合には省略可能 local: trueform_withはデフォルトでAjax(リモート送信)を行うことになっているので、それをキャンセルする。 form.text_field1行のテキストボックスを作る :content「content」というキーを設定する form.submitフォームを実行するボタンを作る 参考にしたサイト Qiita "Markdown記法一覧"
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

rubyとrails のバージョン確認方法

ターミナル上でrubyとrailsのバージョンを確認する方法をメモしておく。 ruby ruby -v rails rails -v (例) username@computernames-MacBook-Pro currentdirectory % rails -v Rails 6.0.4 username@computernames-MacBook-Pro currentdirectory % ruby -v ruby 2.6.5
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ローカルにおけるrubyとrailsの環境構築

実際の開発業務に参加した際に、ローカルでrubyとrailsの開発環境をセットアップして、苦労したのでその軌跡をまとめておく。 なお今回のインストールするバージョンは以下の通りである。 ruby 2.7.1 rails 6.0.3 mysql 5.7 参考記事 Homebrewのインストール - MacにHomebrewをinstallする $ /bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)" - Homebrewのupdateの準備 $ git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow $ git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow - Homebrewのupdate $ brew update Rubyのインストール(ここでは2.7.1 - ruby rbenv ruby-buildのインストール $ brew install ruby rbenv ruby-build - rubyのバージョンを2.7.1にする $ rbenv install 2.7.1 $ rbenv global 2.7.1 - .zshrcの修正 $ vim ~/.zshrc # 以下を追記 eval "$(rbenv init -)" $ source ~/.zshrc - rubyのバージョン確認 $ ruby -v # => ruby 2.7.1 $ which ruby # => /Users/******/.rbenv/shims/ruby MySQL 5.7のインストール(クローン先のDB設定に準拠する - Homebrewでmysql 5.7 をインストールする $ brew install mysql@5.7 - MySQL5.7にパスを通す $ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc $ source ~/.zshrc - MySQLの起動 $ brew services start mysql@5.7 - MySQLに接続確認 $ mysql -uroot プロジェクトをgit clone 割愛 環境変数の設定 割愛 bundle installに向けた事前対策 ここはクローン先のリポジトリによって大きく変化すると思います。 Railsの依存ライブラリmimemagicのライセンス問題を解消する $ brew install shared-mime-info ローカルにrails 6.0.3をinstallする $ gem install rails -v 6.0.3 起動 $ bundle install $ rails db:create $ rails db:migrate $ rails db:seed $ rails s localhostへアクセス 以上です!最後までお読み頂き、ありがとうございました!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む