- 1. Rails testで「 FATAL: Listen error: unable to monitor directories for changes.」のエラー
- 2. 【Rails】一意性を保つバリデーションの実装
- 3. オリジナルのアプリを完成させるまでの解説
- 4. railsで動画を投稿する
- 5. has_manyとbelongs_toの使い方
- 6. [Rails]よく作る、基本的な機能まとめ
- 7. mini_magickでmini_magick_processing_errorが出る
- 8. scopeでnilを返すとallが適用される
- 9. [rails]deviseで登録・ログインができない問題
- 10. ec2にdocker環境を構築してみた
- 11. [rails]deviseで作成したviewページの編集が反映されない
- 12. minio を同じサーバーのdockerコンポーネントで立ち上げている場合に、それをnginxプロキシーで外向きの https:// に設定して、CarrierWave経由のfogでそのhttps://ドメインをendpoint あるいはasset_hostとして指定して、Railsで画像アップロードしようとすると、ドメインがIPアドレスになって、サービスを検知できない問題
- 13. Carrierwave導入
- 14. [Rails / IBM Watson] 使い方メモ
- 15. 【チーム開発にて】他メンバーのブランチに移動して、rails sした時のエラー【Rails】
- 16. deviseでのログイン画面実装
- 17. 現場で学んだRailsリファクタリングの話
- 18. Strong Parametersとは?
- 19. 【Rails】コールバックでターミナルにバリデーションエラーを出力する
- 20. セレクターで投稿内容をカテゴライズ
Rails testで「 FATAL: Listen error: unable to monitor directories for changes.」のエラー
#前提
Rails 6.0.3
ruby 2.6.3#本題
“`
$rails test
“`
のコマンドを実行した時に以下のエラーが発生。“`
$ rails test
FATAL: Listen error: unable to monitor directories for changes.
Visit https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers for info on how to fix this.
“`1つのユーザIDに対して生成できるinotifyのインスタンスの数の上限に達してしまったようなことが書かれている?のではないかと思いました。
エラー内容に書いている通り、Githubを確認しコマンドを入力し解決。##解決方法
ユーザーインスタンスを確認。“`
$ cat /proc/sys/fs/inotify/max_user_instances
“`
inotifyのインスタンス上限を変更。“`
$ echo fs.in
【Rails】一意性を保つバリデーションの実装
#一意性バリデーションの実装に必要なタスク
1. アプリ側に記述(uniqueness: true)
2. データベース側に記述(unique: true)#アプリ側に記述
“`models/user.rb
validates :email, uniqueness: true
“`#データベース側に記述
“`
$ rails g migration add_column_to_users
“`“`add_column_to_users.rb
def change
add_index :users, :email, unique: true
end
“`“`
$ rails db:migrate
“`テーブルのカラムに一意性を持たせるには、**インデックスの作成**も必要になる。
理由は、全てのデータを検索することで、過去のデータと重複しているか確認できるため。
オリジナルのアプリを完成させるまでの解説
#環境
macOS 10.15.5
Rails 5.2.4.2
Docker 19.03.12#概要
オリジナルアプリの概要はCRUDのシステムを意識した簡易的なメモアプリの開発です。
簡易的なアプリと言っても実用性には欠かないよう注意を払いました。行数が増えてもレイアウト崩れが起きないように実装し、文字数制限や空白の項目が新規作成されないようにも設定しました。Dockerを用いてフレームワークはRailsを使用しました。そしてHerokuにより公開をしています。
#オリジナル性について
HTMLに関してはclass名などは学習サイトをヒントに用いて、デザインは外観は学習サイトをヒントにしましたが実装は全て自走で行いました。
Railsの機能の実装に関して事前に学習サイトを何度も繰り返し行い、CRUDの機能を頭に入れてから今回の作成を行いました。そのため短いコードなどはなるべくサイトなどを参考にせず、自分で覚えた内容で実装し、コマンド操作は基本的に全て頭に入れた内容のみで行いました。#サイトについて
railsで動画を投稿する今回、初投稿させていただきます。
少し、見にくかったりしてもご了承お願いします。今回は、railsで動画アップロード機能の備忘録となっております。
個人的にFFmpegを使用した動画アップロードが分かりにくかったので、なるべく分かりやすく説明できればと思います。#環境
Ruby 2.6.5
Rails 6.0.3.2#早速取り掛かっていく
“`ruby:ターミナル
rails new RailsApp
“`
ターミナルでRailsAppを作ります。“`ruby:Gemfile
gem ‘carrierwave’
gem ‘mini_magick’
“`
Gemfileに追記“`ruby:ターミナル
rails bundle install
“`
ターミナルでbundle installします。“`ruby:ターミナル
rails g uploader video
rails g scaffold post video:string
“`
ターミナルでuploaderとscaffoldを作成“`ruby:ターミナル
rails db:mig
has_manyとbelongs_toの使い方
#プログラミングの勉強日記
2020年8月2日 Progate Lv.226
`has_many`と`belongs_to`の使い分けに戸惑った。`has_many`のときに複数形にするのを忘れてしまい、うまく実行されなかったので、`has_many`と`belongs_to`についてまとめる。#関連付け(アソシエーション)とは
2つのテーブルを関連付けさせること。テーブル間の関係をモデル上の関係として操作する仕組み。
テーブル同士の関係には「1:1」「1:多」「多:多」の3つの関係が存在する。今回は「1:1」「1:多」の関係を表すときに使う`has_many`と`belongs_to`についてまとめる今回は、UserテーブルのidをPostテーブルと関連付けをして、誰の投稿かわかるようする。
#has_manyとは
`has_many`は「1:多」の関連付けを表し、〇〇が複数の〇〇を所有しているという関係を表す時に使う。関連付けをすることによって、データをまとめて扱えるようになるので、より効率的にデータベースを操作することができる。“`ruby:models
[Rails]よく作る、基本的な機能まとめ
## はじめに
WEBエンジニアとして勉強していて、「[Progate](https://prog-8.com/)や[ドットインストール](https://dotinstall.com/)は終わったけど、これで仕事ができるようになるの?」と疑問に思っている人向けに、個人的に**よく作る、基本的な機能**をまとめてみました。
ここでまとめている機能を一人で作れるようになれば、そのスキルを応用してより発展的な機能を作ることもできるのではないでしょうか。
また、この記事で書いている機能は、単体で完結する1つの機能というよりは、他の機能と連携させて機能するといった場合もあります。
タイトルにRailsと書いてますが、この記事で書いている機能については大体のWEBサービスでよく作るものだと思います。
## 対象となる方
– これから仕事でRailsを書いていく予定の人 :muscle:
– WEBサービスってどんな機能があるのか知りたい人 :thinking:## 注意事項
この記事では以下のことは詳しく扱いません。
– 具体的な実装方法(他に多くの参考情報があるため)
mini_magickでmini_magick_processing_errorが出る
##画像ファイルを選択して、登録ボタンをおすもエラーが出る。
エラー文には以下の文章が含まれていた。“`
mini_magick_processing_error
“`解決方法
ターミナルで以下のコマンドを入力してからサーバーを再起動したら直った。“`
brew install imageMagick
“`参考
http://cojirooo777.blog.fc2.com/blog-entry-37.html
scopeでnilを返すとallが適用される
scopeで`find`や`find_by`、`first`や`last`メソッドは使うべきではない
“`ruby:user.rb
scope :normal, -> (type) { where(type: type).first }
“`
このようなscopeでnilを返すと、allが適用されてしまい、`User.all`が返ってしまう。
これを防ぐためには、scopeでは、ActiveRecord::Relationオブジェクトを返すようにする。
なので、ここでは、`first`メソッドを付けずに`where`メソッドで取得する。
whereメソッドでは対象のデータない場合は、nilは返さず、`[]`を返す。
この`[]`はActiveRecord::Relationオブジェクト。“`ruby:user.rb
scope :normal, -> (type) { where(type: type) }def normal_record(type)
normal(type).first
end
“`
もしくは、scopeの呼び出し先で、`first`メソッドを
[rails]deviseで登録・ログインができない問題
#deviseで登録・ログインができない
deviseでユーザー登録とログイン画面を作成した後に、
デフォルト(email)以外の情報で登録・ログインをしたい時用の方法です。viewページのフォームを編集したのに、登録・ログインできないトラップがありますので、
参考にしてください。以下の場合、sing_upとaccount_updateのkeyを変更しています。
“`app/controllers/application.controller.rb
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters if resource_class == User devise_parameter_sanitizer.permit(:sign_up, keys: [:na
ec2にdocker環境を構築してみた
railsアプリをec2を利用して本番環境でデプロイした際に、dockerを導入してみました。
ec2にdocker及びdocker-composeをインストールするには以下を参考にしました。
https://qiita.com/y-do/items/e127211b32296d65803aec2にsshログインし、mysqlにマイグレーションするまでは以下が詳しく書いてあります。
https://qiita.com/naoki_mochizuki/items/f795fe3e661a3349a7ce## MySQLの設定以降
amazon linuxではデフォルトがmariadbのため以下のエラーが出ます。“`
$ sudo service mysqld start
Redirecting to /bin/systemctl start mysqld.service
Failed to start mysqld.service: Unit not found.
“`
該当する方は以下を参考にmysqlをインストールしてください。
https://qiita.com/h
[rails]deviseで作成したviewページの編集が反映されない
#deivseで作成したviewページの編集が反映されない
deviseでデフォルトのログインページを編集し、画面を確認したところ、
編集内容が反映されていない問題が発生したので、解決方法を記録しておきます。“`config/initializers/devise.rb
#config.scoped_views = false の記述箇所のコメントアウトを外し、falseをtrueに変更だけ
config.scoped_views = true
“`これだけで解決しました。
minio を同じサーバーのdockerコンポーネントで立ち上げている場合に、それをnginxプロキシーで外向きの https:// に設定して、CarrierWave経由のfogでそのhttps://ドメインをendpoint あるいはasset_hostとして指定して、Railsで画像アップロードしようとすると、ドメインがIPアドレスになって、サービスを検知できない問題
自分メモです。
タイトルは実際には
「minio を同じサーバーのdockerコンポーネントで立ち上げdocker network経由でも使えるようにした上で、それを同時にnginxプロキシーで外向きの https:// に設定しているので、CarrierWave経由のfogでは、その https:// URL をendpointあるいはasset_hostとして指定した場合、Railsで画像アップロードしようとすると、その指定した https:// URL がIPアドレスに変換されてしまい、サービスを検知できない問題」とすべきなのですが……
とにかくこの問題は起こりました。解決策は、StackOverflow の下記ページにありました。でも、たどり着くのに少し時間がかかった。
asset_hostはそれでいい。しかし、endpointはdockerのコンテナ名を指定すべきと。[StackOverflow: Can’t upload file through carrierwave fog-aws to minio (docker-compose)](https://stack
Carrierwave導入
#Gem file追加
“`ruby:Gemfile
gem ‘carrierwave’
gem ‘mini_magick’
“`
“`terminal:terminal
$ bundle install
“`
#Uploader作成
“`terminal:terminal
$ rails g uploader image
“`
“`ruby:app/models/gear.rb
class Gear < ApplicationRecord mount_uploader :image, ImageUploader end ``` ```ruby:app/uploaders/image_uploader.rb class ImageUploader < CarrierWave::Uploader::Base include ~~ CarrierWave::MiniMagick ~~ process resize_to_fit: [400, 500] # それぞれコメントアウトされているので、コメントを外す。 def default_url '
[Rails / IBM Watson] 使い方メモ
# この記事は何?
別のサイトで記録していた内容を移設中です(移設作業進行中…)
※[元はここ](https://siruku6-lab.herokuapp.com/blogs)に掲載していました。# Text to Speech について
1. IBMのコンソール画面でインスタンスを作成
username, password をメモしておく
[参考(IBM)](https://console.bluemix.net/services/text_to_speech/44a79426-8cc8-471b-b957-8bd2a4cd74d6/?paneId=gettingStarted&new=true&env_id=ibm:yp:us-south&org=4e4f7b18-f816-4c32-ac8a-7ed28359bca5&space=eabaabb8-516b-409e-9b04-62084766d7a9)
1. audioファイル置き場生成
`mkdir public/audios`
1. ソースを書く“`ruby:app/controllers/h
【チーム開発にて】他メンバーのブランチに移動して、rails sした時のエラー【Rails】
#参考対象者
– チーム開発初心者
– Railsでのアプリ開発にて、データベース関連のエラーで困ってる方
– Git初心者#環境
“`
$ rails -v
Rails 6.0.3.1
“`
“`
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin19]
“`“`
$ git –version
git version 2.27.0
“`“`
$ mysql –version
mysql Ver 14.14 Distrib 5.7.29, for osx10.15 (x86_64) using EditLine wrapper
“`#状況
– 他メンバーのブランチに移動し、レビューするために挙動確認したかったが、サーバーを立ち上げるときにエラーが出た。
– どうやら、データベース関連のエラーらしい。#ActiveRecord::PendingMigrationError
>https://qiita.com/KONTA2019/items/04
deviseでのログイン画面実装
#deviseでのログイン画面実装
1.Gemfileに「gem ‘devise’」を追加
“`
gem ‘devise’
“`2.追加したdeviseを、アプリケーションに読み込ませる。
※gemを追加した時に忘れてはいけない“`
$ bundle install
“`3.deviseの初期設定
“`
$ rails g devise:install
“`これでdeviseを使う準備は完了。
4.Userモデルとマイグレーションファイルを作成
rails g devise モデル名の記述は、devise独自のルールです。“`
$ rails g devise User
“`5.データベースへ反映
新しくUserテーブルをデータベースへ反映させます。“`
$ rails db:migrate
“`6.deivse用のログイン画面を作成
“`
$ rails g devise:views
“`7.rails s -b 0.0.0.0でサーバー起動させ、画面確認
![image.png](https://qiita-i
現場で学んだRailsリファクタリングの話
## 現場で学んだ話
Railsの開発で意識している一般的なアーキテクチャの話です。
fatコントローラー、fatモデルにならないように意識していることを備忘録メモ。乱文のため、適宜修正していきます。
## コントローラーはシンプルに!!
コントローラーに追わせる責務は、究極的にこう考えています。
**「インスタンスを作り、それに対してメソッドを実行して、レスポンスを返す」**
これだけ。
こう言うのは最悪。
“`ruby:example.contoroller.rb
こんなアクションとかありえないです
def index
@most_funded_projects = []
most_funded_projects = Project.most_funded.includes(:main_image)
most_funded_projects.each do |most_funded_project|
break if @most_funded_projects.count >= 3
if @site_project_
Strong Parametersとは?
#Strong Parametersとは
Strong ParametersはRails4系から追加されたセキュリティを向上させるための仕組みです。
指定した値以外は受け取らないようにして、攻撃者による意図しないコードの実行を防止するセキュリティ対策。フォームからデータを送信するときは、「マスアサインメント脆弱性」というセキュリティ上の問題があります。
簡単に伝えると、データ送信時に不正なリクエストによって、予期しない値が変更されてしまう脆弱性です。
Railsでは、この脆弱性を防ぐ「Strong Parameters」の仕組みが用意されています。こんな感じです。
Strong parametersは必ずprivateより下に記述します。“`app/controller/user_controller.rb
class UsersController < ApplicationController def create user = User.new(user_params) end private def user_params pa
【Rails】コールバックでターミナルにバリデーションエラーを出力する
# ◯◯.saveや◯◯.createに失敗する時の原因を教えてくれなくて困る
例えばmessageモデルのインスタンスのsaveに失敗した時
“`
Started POST “/groups/2/messages” for ::1 at 2020-08-01 13:56:59 +0900
Processing by MessagesController#create as */*
Parameters: {“authenticity_token”=>”PKsrO+YPeqs8AmQ+sB+9YacFtKCb+gpdTkHPTgxG4/vs6wE0swZrWNYXKyBe4ipm9aQDII8PpHSUzL3JPeYPpw==”, “message”=>{“content”=>””}, “group_id”=>”2”}
User Load (25.1ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 6 ORDER BY `users`.`id` ASC LIMIT 1
Group Load (0.6ms)
セレクターで投稿内容をカテゴライズ
#カテゴライズしたいModelを作成
“`terminal:terminal
$ rails g model Club name:string
$ rails db:migrate
“`
今回はGear ModelにClub(Driver, Iron…)属性
を追加するので、Club Model作成#Gear Modelにclub_idを追加
“`terminal:terminal
$ rails g migration add_club_id_to_gears club_id:integer
$ rails db:migrate
“`# Association追加
“`ruby:app/models/gear.rb
class Gear < ApplicationRecord belongs_to :club end ``` ```ruby:app/models/club.rb class Club < ApplicationRecord has_many :gears end ``` #gear_controllerのnew actionでclub