Rails関連のことを調べてみた2020年07月03日

Rails関連のことを調べてみた2020年07月03日

EC2、RDSを利用してRailsアプリをデプロイする [NGINX + puma + PostgreSQL + Rails 6]

# 目標:AWSのEC2、RDSを利用してRailsアプリをデプロイする

– Railsチュートリアルをより実践的な環境、Ultimate Hard Modeで挑みたい
– NGINX, puma, PostgreSQL, Rails 6で開発〜デプロイ
– ローカル開発環境へ移行
[はじめてのDockerでRails開発環境構築 [NGINX + Rails 5 (puma) + PostgreSQL] – Qiita](https://qiita.com/daddy_hacker/items/66d8fd40ce01d1aeea02)
– 脱Herokuで模擬CI/CD環境を取り入れたい(この後自動デプロイまでいきたい)
– AWSを利用した、より実践的な本番環境構築のウォームアップ

このような目的のため、とりあえずAWS上でアプリが動くことを目標にしています
そのためセキュリティ面で本来必要そうな手順(環境変数定義や、SSL対応)を排除して進行しております

備忘録的に記録を残しておりますので、
思い出したことや、不備あれば随時訂正いたします

# 気づき

– 環境

元記事を表示

Ruby on Rails チュートリアル(第4版) 第4章

4.2 nanoエディタから離脱する際、`Ctrl+X`→`Y`だけでは離脱出来ず。`Enter`キーを押せば離脱出来た(ググった)。

##4.2.2 演習
1.city変数に適当な市区町村を、prefecture変数に適当な都道府県を代入してください。

“`
>> city = “横浜市”
=> “横浜市”
>> prefecture = “神奈川県”
=> “神奈川県”
“`

2.先ほど作った変数と式展開を使って、「東京都 新宿区」のような住所の文字列を作ってみましょう。出力にはputsを使ってください。

“`
>> puts “#{prefecture} #{city}”
神奈川県 横浜市
=> nil

“`

3.上記の文字列の間にある半角スペースをタブに置き換えてみてください。(ヒント: 改行文字と同じで、タブも特殊文字です)
 tabキー押しても何も無いと思ったら、`\t`でtabらしい。

“`
>> puts “#{prefecture}\t#{city}”
神奈川県 横浜市
=> nil
“`

4.タブに置き換えた文字列を、ダブル

元記事を表示

Rails こんなこともできるよ中間テーブル

どうもチャンクノです!!
今回は中間テーブルについて書いていきます。

多分基本的に中間テーブルを作成する場合、多対多の両テーブルのidを中間テーブルに持たせると思います。
https://qiita.com/gomasio1010/items/2cff1e11d2cc82fde464
この記事のような感じ。

でも中間テーブルって必ずしもidじゃなくていいみたいです。
自分が今担当している部分の中間テーブルは

“`
create_table :search_condition_areas do |t|
t.string :area_code
t.references :search_condition, foreign_key: true
t.timestamps
end
“`
こんな感じになってます。

このままだと :area_codeがただのstring型のカラムになってしまうので、

“`
has_many :search_condition_areas, foreign_key: :area_code, primary_key: :code
has_

元記事を表示

Rails Tutorial MEMO#8

#Rails Tutorial第8章
##基本的なログイン機構
本章では、ログインの基本的な仕組みを実装していく。
##8.1 セッション
HTTPはそれより前のリクエストの情報を全く利用できない、Statelessなプロトコル。故にユーザーのIDを保持しておく手段がHTTPプロトコル内「には」全く無い。
ユーザーログインの必要なWebアプリケーションでは、セッション(Session)と呼ばれる半永続的な接続をコンピュータ間(ユーザーのパソコンのWebブラウザとRailsサーバーなど)に別途設定する。
Railsでセッションを実装する方法として最も一般的なのは、`cookies`を使う方法。
###8.1.1 Sessionsコントローラ
`create`アクションにPOSTリクエストを送信すると、実際にログインする。
`destroy`アクションにDELETEリクエストを送信するとログアウトする。
Sessionsコントローラを生成する
`$rails generate controller Sessions new`
routesにリソースを追加する。

“`config/rou

元記事を表示

なんとActiveRecordはDB跨ぎでの関連付けが可能っぽい

業務中に知って驚いたこと。休日に気が向いたら深堀するかも。

# 前提

– `User has_many Posts through UserPosts`という関連付けをしたい。
– `User`テーブルは、`Posts`テーブルと`UserPosts`テーブルとは異なるDBのテーブル。

# 予想
“`User.rb
has_many :posts
has_many :read_posts, source: :posts, through: :user_posts
“`

なんてasociationをモデル層に書いても流石に`User.read_posts`は取ってこられないだろうと鼻を括っていた。

# しかしだ。。。

– ActiveRecordがpreloadを使っているのなら、関連付け可能で取ってこれる
– ActiveRecordがeagerloadを使っているのなら、関連付け不可能(JOINを使っているから)

# 詳しいことは時間があったら調べてくれ

[参考](https://texta.pixta.jp/entry/2016/02/10/180244)

元記事を表示

Ruby on Rails チュートリアル(第4版) 第3章

## 3.1 演習
1.BitbucketがMarkdown記法のREADME (リスト 3.3) をHTMLとして正しく描画しているか、確認してみてください。
 省略
2.本番環境 (Heroku) のルートURLにアクセスして、デプロイが成功したかどうか確かめてみてください。
 省略

## 3.2.1 演習
1.Fooというコントローラを生成し、その中にbarとbazアクションを追加してみてください。

“`
$ rails generate controller Foo bar baz
“`

2.コラム 3.1で紹介したテクニックを駆使して、Fooコントローラとそれに関連するアクションを削除してみてください。

“`
$ rails destroy controller Foo bar baz
“`

## 3.4.2 演習
1.StaticPagesコントローラのテスト (リスト 3.24) には、いくつか繰り返しがあったことにお気づきでしょうか? 特に「Ruby on Rails Tutorial Sample App」という基本タイトルは、各テストで毎回同じ内容

元記事を表示

【Ruby理解度チェック】何が起きているか説明できますか? &&とand

面白い質問があったのでテスト形式でシェア

# 現象
“`ruby
def ampersand_return
puts “foo” && return
puts “bar”
end

def and_return
puts “foo” and return
puts “bar”
end

> ampersand_return
=> nil

> and_return
foo
bar
=> nil
“`

何が起きているか説明できますか?

# 回答
原則として、`&&`と`and`の違いはその[優先順位](https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html)にある

## `&& return`の方
`&&`が先に演算され、以下と同値になる

“`ruby
puts (“foo” && return)
“`

`”foo”`はtruthyなので、右辺の`return`が処理され、メソッドは何も出力せずreturnする。

## `and return`の方
`puts “foo”`が先に演算

元記事を表示

【Rails】hamlコード早見表

Github公式 [Haml-rails](https://github.com/haml/haml-rails)
チュートリアル [HamlTutorial](http://haml.info/tutorial.html)

# 導入

“`rb:Gemfile
# 以下を追加し`bundle install`
gem “haml-rails”, “~> 2.0”

# Rails4の場合
gem “haml-rails”, “~> 1.0.0”
# Rails3の場合
gem “haml-rails”, “~> 0.4.0”
“`

**html.erbをhtml.hamlに変換**
`$ rails generate haml:application_layout convert`
全てのerbファイルを変換する場合
`$ rails haml:erb2haml`

# HTMLコード

“`rhtml:erb

blue
blue
blue
元記事を表示

Railsでproduction環境運用する際にしたほうがいい設定

##ブラウザ上のエラー表示をdevelopmentとproduction環境で同じにする
まずdevelopment環境でERRORが発生するとブラウザに詳細情報が表示されます。
8c1d32d1432226f625cab33c2ed1fcc7.png
しかし、production環境だと何かしらのERRORが発生したとしても「We’re sorry, but something went wrong.」と表示されてしまいます。
![picture_pc_f8886f63bd354c264487153ad2c5c567.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611668/f674015b-2a6f-d900-9a71-20

元記事を表示

【Rails】APIモードで開発を始めたけど、やっぱりcookie使いたい

# はじめに
自分用なので手順しか書かない

# 手順

## controllerに追記
controllerでcookiesを呼び出す時の話
APIモードだと `cookies` がそもそも呼び出せない

ApplicationController か、cookiesを呼びだすcontrollerに以下を追加

“`ruby
include ActionController::Cookies
“`

## middleware追加
middlewareを追加しないとcookieの読み出しも書き込みも実際してくれない

application.rbに以下の2行を追加

“`ruby
config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Session::CookieStore
“`

# おわり
ここまでやるとDeviseも自然にset-cookie返してくれるようになります
基本はDevise + jwtでやってたんですけど、API経由ではないルート追加するこ

元記事を表示

BootstrapをSassで編集するための手順

#はじめに
簡単そうで意外と面倒だったSassの使い方を備忘録として書いておきます。
※この記事は既にBootstrapが導入されていて、これからSassを使ってレイアウト編集することを想定しています。

Sassを使おうと思ったきっかけは[現場で使える Ruby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227)を使ってタスク管理アプリを作成中に細かいレイアウトを編集したいなと思ったのですが、参考書ではBootstrapだけを使った装飾しか使われていなかったためです。

そもそもSassって何?という人は以下のリンクを参照
[これからはcssはSassで書こう。](https://qiit

元記事を表示

GETとPOST(GET以外)で同じコード、でも挙動が違う

ちゃんと調査しないと気付かなかったのでメモがてら、誰かが同じ問題に直面したときの助けになれば。

# 概要
ある日、GETとPOSTで挙動が違うという話が。
コードを見てみたら、コントローラーの同じアクションにGETとPOSTがルーティングされていました。
どう見ても同じ処理。そこに差異は無いので挙動ベースでデバッグしてみることに。
テストコードでは上手く動いていました。でも直接APIを叩いてみると、たしかに違う挙動。

最終的に気付いたのが、問題のあるリクエストではCSRFトークンが渡ってきていないことでした。
アクション内ではsessionが使われており、CSRFトークンが渡されていないことでリクエストは空のsessionに対して処理されていました。これは元々のsessionとは別のものとして扱われ、その結果挙動が変わってしまっていました。

# 詳細
例としてこのようなコントローラがあるとします。
(POSTの代わりにDELETEにしていますが、挙動は同様です)

“`ruby:app/controllers/session_controller.rb
class Sessio

元記事を表示

Rails  テーブル作成、カラムの追加や削除

## はじめに
よく忘れるので、メモ

## モデル作成 テーブル作成

railsでモデルを作成する際に、テーブルを作成するためのマイグレーションファイルが同時に作られます。
↓モデル作成コマンド

“`
$ rails generate model [モデル名] [属性名:データ型 属性名:データ型・・・] [オプション]

省略版
$ rails g model [モデル名] [属性名:データ型 属性名:データ型・・・] [オプション]
“`
-コマンドを実行すると、自動で作られるファイル

 ①モデルのクラスファイル
 ②マイグレーションファイル
 ③モデルの自動テスト
 ④モデルの自動テストで使うfictureファイル

“`
例 $ rails g model User name:string email:string
上のコマンドで作ると下のマイグレーションができる。

class CreateUsers < ActiveRecord::Migration[5.2] def change create_table :users do |t|

元記事を表示

deviseで複数モデルを管理

# deviseで複数のモデルを管理

最近、ECサイトを開発するにあたり、出てきたユーザーのログイン機能実装。

ですが、ECサイトのようなユーザーとは別な使用(今回でいう注文の確認と新規商品等の確認)をする管理者もログインが必要になる場合、どうしたらいいかということで下記サイトを参考にしました!

https://qiita.com/Yama-to/items/54ab4ce08e126ef7dade

ここからは自分の頭を整理するために流れを簡潔にまとめて見ました。

rails g devise:install

config/initializers配下にdevise.rb が追加される。

最後の

config.scoped_views = true

に変更してコメントアウト。
このファイル他にもコメントされている部分があってなんかすごい大事そうな気配がしたので、それぞれの意味を調べて見ました!
下記がとてもわかりやすくまとめてありました!

https://qiita.com/linkss/items/9b005ebc2ef81a39afa2

元記事を表示

Selenium::WebDriver::Error::StaleElementReferenceError

#開発環境

・Ruby: 2.6.3
・Rails: 6.0.3
***

#Selenium::WebDriver::Error::StaleElementReferenceError
**system specのテスト時**に以下のエラーが出ました。

“`rails

Selenium::WebDriver::Error::StaleElementReferenceError:
stale element reference: element is not attached to the page document
(Session info: chrome=83.0.4103.116)
“`

#ドキュメント

“`
A command failed because the referenced element is no longer attached to the DOM.

訳:参照された要素がDOMにアタッチされなくなったため、コマンドが失敗しました。
“`

#エラーが起きたテストをみてみる

“`spec/system

元記事を表示

【Rails】resourceとresourcesは別物ですね

題の通りです。
私はタイポに気づかず1時間悩みました。

#環境
Rails v5.2.4.3
Ruby v2.5.1

#やりたかったこと
index.html.erb内にlistsコントローラーのeditにつながるリンクを作りたかったです。

“`list_controller.rb
def index
@lists = List.order(“id”)
end
“`

“`index.html.erb
<% @lists.each do |list| %>
<%= link_to "編集", [:edit, list] %>
<% end %>
“`

“`routes.rb
resource :lists
“`

ここまで授業を振り返りながらやっていたつもりだったから間違えていると思っていなかった。
だがしかしエラーが出る。

“`
undefined method `edit_list_path’ for #<#:hogehoge>
“`

メソッドがないと。

ターミナルの方でルーティングを出してみました。

“`
$ rail

元記事を表示

Error ExecJS::RuntimeUnavailable: 発生時の対処法

#発生現象
AWSのEC2でWebサーバ、アプリケーションサーバの設定時に、環境変数の設定をする際の`$ rake secret`を実行した際に下記Errorが発生。

“`terminal:terminal
ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
/var/www/chat-space/config/application.rb:7:in `
/var/www/chat-space/Rakefile:4:in `require_relative’
/var/www/chat-space/Rakefile:4:in `
(See full trace by running task with –trace)
“`
→Javascriptがうまく走っていないので、[Node.js](htt

元記事を表示

railsのバリデーションとnull: false 自分用メモ

バリデーションとは、リクエスト側が送信した特定のカラムの値が空のままだったり、意図しない形で保存されるようなことを防ぐために、予めモデルに記述しておく、門番のような役割。

valid.png

上記の例だと、

text「通りまーす」
validates「待て」
text「えっ」
validates「お前何も入力されてないじゃないか。やり直し」
text「ぴえん」

こんな感じ。

一方でnull: falseとは。
実はこちらも空のままのデータを受け入れないための門番、その2。
null.pngRailsの存在確認メソッド 使い分けメモ (any?/empty?/present?(!blank?)/nil?)

# はじめに
Railsのビューで、「画像があったら表示させる」みたいな処理を書く場面がありました。
存在確認のためのメソッドは、Rubyのもの、Railsのもの含め、いくつかあります。
ちょっと調べて、「よし、これで行こう!」とメソッドを選択してレビューに出したところ、おもいっきり玉砕したので、今後間違えないように備忘録として残しておきます。

# 環境
macOS Catalina Version 10.15.5
Ruby: 2.6.5
Ruby on Rails: 6.0.3

# 調査対象
– any?(Ruby)
– empty?(Ruby)
– nil?(Ruby)
– present?(Rails)

#動機
過去にも類似の記事はあり、実際に大部分、「[rubyの真偽判定メソッド(nil?/empty?/blank?/present?)を検証してみた結果、興味深いことがわかった](https://qiita.com/go_d_eye_0505/items/541110cb9821734b0623)」に乗っからせていただきました。そのうえで、今回投稿に至った理由は、以下とな

元記事を表示

【Railsアプリ、AWS、SendGrid】550 Unauthenticated senders not allowed

RailsアプリをAWSにあげたらSendGridのメールが送れなくて困った。
レイルズチュートリアルの11章の設定を参考にしたままだった模様。

なので、基本設定はこちらを参考にした。
https://sendgrid.kke.co.jp/docs/Integrate/Frameworks/rubyonrails.html

※ユーザーネームとパスワードはenvファイルを使うこと。
こんな感じ。

“`
ENV[‘SENDGRID_USERNAME’]
ENV[‘SENDGRID_PASSWORD’]
“`

で、修正したのに以下のエラーが消えない

“`
550 Unauthenticated senders not allowed
“`

なんで??と悩むこと1週間ほど。結論を書きます。
①インスタンスを再起動
②nginxを再起動
③Unicornを再起動
②と③は以下を参考にした。
https://qiita.com/naoki_mochizuki/items/5a1757d222806cbe0cd1#%E7%A2%BA%E8%AA%8D

EC2サーバーとWEBサー

元記事を表示

OTHERカテゴリの最新記事