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

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

[aws,rails,css]awsにデプロイした時にcssが反映されないエラーの解決例

#1.エラーの原因は?
ec2上の`etc/nginx/conf.d/rails.conf`の記述内容の参照先の誤りにより、

`/var/www/アプリ名/public/asset`とすべきところを
`/var/www/アプリ名/current/public/asset`としていたためでした

#2.解決方法

下記コマンドで設定箇所に飛びます

“`
[ec2-user@ip-111-11-11-11 ~]$ cd /etc/nginx/conf.d
[ec2-user@ip-111-11-11-11 conf.d]$ sudo vim rails.conf
                    #↑書き込みを行うのでsudoをつけてください(権限ありで開くコマンド)
“`

下記のように内容を編集してください

“`
upstream app_server {
# sharedの中を参照するよう変更
server unix:/var/www/freemarket_sample_62d/shared/tmp/sockets/unicorn.sock;
}

serv

元記事を表示

Rails ~コメント編集ページの作成~

#概要
Railsによるコメント編集ページの作成、実装についてまとめる。

#ユーザー編集ページの作成
###まずは見た目を作る。

##controller
“`
def edit
@user=User.find_by(id:params[:id])
end
“`
コントローラでは変数@userを定義。find_byメソッドで選択したidを代入するように設定する。

##routes
“`
get “user/:id/edit”=>”user#edit”
“`
左はリンク先、右は飛ぶアクション先を表す。

##view
“`

アカウント編集

ユーザー名

元記事を表示

Rspecに関するメモ書き

※適宜更新

Headless Chromeを使って試験をしたい場合はこれをかく。
もちろんGemは入れないといけないのでGemfileには必要なGemが入っていることが前提。

“`spec-helper.rb
/require/‘capybara/rspec’
RSpec.configure do |config|
config./before/(:each, type: :system) do
driven_by :selenium_clome_headless
end
“`

元記事を表示

Qiita風 ブログアプリ作ってみよう ver- 2

## Modelの作成
“`
$ rails g model blog
“`
“`

invoke active_record
create db/migrate/20200311152022_create_blogs.rb
create app/models/blog.rb
invoke test_unit
create test/models/blog_test.rb
create test/fixtures/blogs.yml
“`

上記のコマンドを実行すると 『app/models/blog.rb』が作成される。

## テーブルの作成
### マイグレーションファイルを編集する
“`ruby

class CreateBlogs < ActiveRecord::Migration[5.2] def change create_table :blogs do |t| t.string :name # 追加 t.str

元記事を表示

Qiita風 ブログアプリ作ってみよう ver- 1

# Qiita風 ブログアプリ制作

qiita-square

## 環境
– ruby 2.5.1
– rails 5.2.3
– mysql2 0.5.3

### terminal
“`
$ cd ~/ 保存したいdirectory
$ rails _5.2.3_ new qiita.blog -d mysql
$ cd qiita.blog
$ pwd
“`

スクリーンショット 2020-03-11 23.55.04.png

上記の写真のよう

元記事を表示

【Rails】フォロー機能

#フォロー機能
##準備
・userテーブル
・relationshipsテーブル(usersテーブルとusersテーブルの間に入るテーブル)

##relationshipsのマイグレーションファイルを編集&実行
“`
$ rails g model Relationship
“`
relationshipsモデルを作成し、マイグレーションファイルを編集&実行します。

“`db/migrate/年月日時_create_relationships.rb
class CreateRelationships < ActiveRecord::Migration[5.0] def change create_table :relationships do |t| t.references :user, foreign_key: true t.references :follow, foreign_key: { to_table: :users } t.timestamps t.index [:user_id, :follo

元記事を表示

rails db:migrateをするとエラーが発生(rails aborted!StandardError: An error has occurred)

# 発生したエラー内容
データベースにカラムを追加しようとすると次のメッセージが表示され処理が中断された。
「duplicate column name」とあるのでカラムが重複しているらしい。

“`zsh
$ rails db:migrate
== 20200311131021 AddRememberDigestToUsers: migrating =========================
— add_column(:users, :remember_digest, :string)
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: duplicate column name: remember_digest
#中略
bin/rails:4:in `


Tasks: TOP => db:migrate
(See full trace by running task with –

元記事を表示

就活用ポートフォリオ紹介「俺のラーメン」 〜制作日数・反省点など〜

#はじめに

こんにちは!
しばた[(@shibata0406)](https://twitter.com/shibata0406)と申します!
地元の食品メーカーにて営業をやっておりましたが、現在はYouTube活動をしながら転職活動中!
興味のある方はぜひ見ていってください〜
→[YouTubeチャンネル「ポントイズ」](http://www.youtube.com/c/ポントイズPonToys)

今回は、ポートフォリオとして作成した「ラーメンサイト」をご紹介いたします。

#ポートフォリオ「俺のラーメン」
スクリーンショット 2020-03-11 20.35.35.png
ラーメン好きの(僕の)ラーメン好きによる(僕による)ラーメン好きの為の(僕のための)ラーメンサイトです。

URL : htt

元記事を表示

Railsで作ったアプリをAWSでデプロイ⑥ 〜Gitクローン,Unicorn導入,credentials設定〜

前回までMySQLを作成しました

Railsで作ったアプリをAWSでデプロイ⑤ 〜MySQL作成〜
https://qiita.com/shunsuke284052/items/a760debce93df295a05e
Railsで作ったアプリをAWSでデプロイ④ 〜EC2インスタンスの環境構築〜
https://qiita.com/shunsuke284052/items/af6957d575179bf5b11a
Railsで作ったアプリをAWSでデプロイ③ 〜Elastic IP,ポート開放,EC2インスタンスログイン〜
https://qiita.com/shunsuke284052/items/fee7caf4a2ecbb49a7c7
Railsで作ったアプリをAWSでデプロイ② 〜EC2インスタンス〜
https://qiita.com/shunsuke284052/items/6de92b0f832d6240f0bb
Railsで作ったアプリをAWSでデプロイ⑤ 〜MySQL作成〜
https://qiita.com/shunsuke284052/items/a760d

元記事を表示

ぼくがかんがえたさいきょうのRails API開発環境

今やっているバイトでRails APIを作成しています。
APIを作成する際に、以下のような問題点が出てきました。

1. APIのdocumentがないとフロントエンドの開発者が開発しづらい
2. documentを書くのにopenapiを採用するが、文法を覚えるのに一苦労するし、見づらいので書き忘れが生じる。
2. API responseの構造に開発者間で違いが出てしまう。
3. 実際のAPIとdocumentの挙動が違うのに修正を忘れてしまう

## 結論

結論から言うと、これらの問題を解決するために以下のようにしました。

1. APIのPRを出す時にopenapiでdocumentを書く。
2. SpotlightStudioを使ってopenapiを書く。
2. responseの形はJsonAPIに従い、gemにfastjsonapiを導入する。
3. committeeというgemを使って実際の挙動とopenapiに書かれていることが違っていないか自動テストする。

## Openapi(元々はSwaggerという名前)を使う

https://swagger.io/

元記事を表示

【RSpec】rack-attack gemをテスト環境では動作しないように設定する方法

## 概要
* rack-attack gemをテスト環境では動作しないように設定した方法です。

## 背景
* rack-attack gemを使ってDoS攻撃対策を設定したところ、HTTPリクエスト関連でfailするようにRSpecを解消するのに詰まったので、こちらに解消法を共有します。

## 解消法

### Gemfileの設定
まずは`production` と `staging` 環境でのみ、rack-attackを導入するように修正します。

“`ruby
group :production, :staging do
gem ‘rails_12factor’

# DoS攻撃対策
gem ‘rack-attack’
end
“`

### configの設定
次にconfigで、どの環境ではrack-attackを使用するかを設定します。

“`ruby
# config/application.rb
(省略)
module Sample
class Application < Rails::Application (省略) co

元記事を表示

Railsで作ったアプリをAWSでデプロイ⑤ 〜MySQL作成〜

前回までにRuby等パッケージをインストールしました

Railsで作ったアプリをAWSでデプロイ④ 〜EC2インスタンスの環境構築〜
https://qiita.com/shunsuke284052/items/af6957d575179bf5b11a
Railsで作ったアプリをAWSでデプロイ③ 〜Elastic IP,ポート開放,EC2インスタンスログイン〜
https://qiita.com/shunsuke284052/items/fee7caf4a2ecbb49a7c7
Railsで作ったアプリをAWSでデプロイ② 〜EC2インスタンス〜
https://qiita.com/shunsuke284052/items/6de92b0f832d6240f0bb
Railsで作ったアプリをAWSでデプロイ① 〜アカウント作成編〜
https://qiita.com/shunsuke284052/items/39bf73d1996251083c72

MySQLをダウンロードします

“`terminal:EC2インスタンス
sudo yum -y install mysql5

元記事を表示

Railsで作ったアプリをAWSでデプロイ④ 〜EC2インスタンスの環境構築〜

前回までにEC2インスタンスを作成しました

Railsで作ったアプリをAWSでデプロイ① 〜アカウント作成編〜
https://qiita.com/shunsuke284052/items/39bf73d1996251083c72
Railsで作ったアプリをAWSでデプロイ② 〜EC2インスタンス〜
https://qiita.com/shunsuke284052/items/6de92b0f832d6240f0bb
Railsで作ったアプリをAWSでデプロイ③ 〜Elastic IP,ポート開放,EC2インスタンスログイン〜
https://qiita.com/shunsuke284052/items/fee7caf4a2ecbb49a7c7

今回は環境構築をしていきます
まずEC2インスタンスにログインしてください

次に下記コマンドを実行します

“`terminal:EC2インスタンス
[ec2-user@ip-123-12-12-123 ~]$ sudo yum -y update
[ec2-user@ip-123-12-12-123 ~]$ sudo yum -y i

元記事を表示

Railsで作ったアプリをAWSでデプロイ③ 〜Elastic IP,ポート開放,EC2インスタンスログイン〜

前回までにEC2インスタンスを作りましたので続きです

Railsで作ったアプリをAWSでデプロイ① 〜アカウント作成編〜
https://qiita.com/shunsuke284052/items/39bf73d1996251083c72
Railsで作ったアプリをAWSでデプロイ② 〜EC2インスタンス〜
https://qiita.com/shunsuke284052/items/6de92b0f832d6240f0bb

作ったEC2インスタンスにElastic IPを振り分けます
こうしないとEC2インスタンス作成時から振り分けられたパブリックIPはサーバー再起動の度に変化してしまいます
AWSから振り分けられた固定のパブリックIPアドレスであるElastic IPを振り分けます

左サイドバーの「Elastic IP」→「Elastic IP アドレスの割り当て」→「Amazon の IPv4 アドレスプール」→「割り当て」でカンタンに作成できます
スクリーンショット 2020-03-11 15.20.40.png

元記事を表示

Railsで作ったアプリをAWSでデプロイ② 〜EC2インスタンス〜

前回の続きです
Railsで作ったアプリをAWSでデプロイ① 〜アカウント作成編〜
https://qiita.com/shunsuke284052/items/39bf73d1996251083c72

今回はEC2インスタンスを作っていきます
EC2インスタンスとはAmazonが提供しているLinuxが組み込まれた「仮想マシン」です

まずはアカウント作りたてなのでリージョンを設定します
ログイン画面の右上です
Amazonの最寄りのサーバを選びます

スクリーンショット 2020-03-11 14.49.08.png

次にEC2インスタンスを作成します
同画面左上「サービス」→「検索バーでEC2と検索」→「左サイドバーからインスタンスを選択」でこの画面になるので、
「インスタンスを作成」をクリック

元記事を表示

scopeを使いまわしたい

# scopeを使いまわしたい

複数のモデルに対して同じスコープを使いたい…しかし一々コピペして同じスコープを定義するのは嫌だったので調べてみたところ、スコープ用のモジュールを切り出すのが良いらしい

## 実現したいこと

“`ruby:こんな動きがしたい.rb
scope :recent, -> { order(created_at: :desc) }
“`

こんなスコープを複数のモデルで使いまわしたい

## 結論

“`ruby:app/models/concerns/common_scope.rb
module CommonScope
extend ActiveSupport::Concern
included do
scope :recent, -> { order(created_at: :desc) }
end
end
“`
このモジュールをモデル側でincludeしてやると使えるようになる

`ActiveSupport::Concern`をextendし、includedブロック内に記述することでscopeをクラスメソッドとして使え

元記事を表示

【Ruby/Rails】シンボルとキーワード引数について学んだ話

プログラミング歴1年目でキーワード引数という言葉を知り、
いろいろ学べたのでまとめてみました!(ついでにシンボルについても!)

駄文ですが読んでいただけると嬉しいです~?

## シンボルについて

### シンボルとは?

めっちゃざっくり言うと『文字列のような見た目をした数値』。
コード上は文字列で見えてるけど、Rubyの内部では数値として扱われるオブジェクト。

シンボルの実態は数値なので、処理速度が文字列よりも早い。

### メモメモ
クラス名・メソッド名・変数名・定数名を定義したときに実は勝手にシンボルも生成されている。

“`ruby:例

# シンボルの確認方法

class Hoge # クラスの定義
end

num = 5 # 変数の定義

p Symbol.all_symbols # 定義済みの全てのシンボルオブジェクトの配列を返す

#=> [:!, :”\””, :”#”, :”$”, :%, :&, :”‘”,… :Hoge, :num,…]
# すでに定義されているシンボルのあるので、めっちゃいっぱいでてくる
“`

[シンボルについてのおすすめ

元記事を表示

Railsのコールバックを用いてtextカラムに自動で記述を追加する方法

もし、ツイートの最後に定型文などをつけたい場合ってどうすればいいんだろう。
今日はそんなことを書きます^^

# コールバックとは

・オブジェクトの生成・更新・削除のタイミングで呼び出されるメソッド
・イベント(create, save,destroy)をトリガーとして登録可能
・トリガに対してメソッドを共通化できて便利

情報を変更や削除した時に呼び出せつメソッドですね。

# before_createで最後に!!を足してみる

では、before_createを使ったコードを書いていく。

“`
before_create :change_tweet

def change_tweet
self.text = text + “!”
end

end
“`

## 処理の流れ

before_createが作動

change_tweetメソッドが呼び出される。

change_tweetメソッドの中に定義してあるself.textの処理

self.textの中には、text + “!”という処理が代入されている

textとは、Twe

元記事を表示

[aws,rails,deployのエラー解決]Errno::ENOENT: No such file or directory @ dir_s_chdirおよびSSHKit::Runner::ExecuteError: Exception while executing as ec2-user@3.115.38.38: bundle exit status: 1のエラー解決例

#1.エラーの様子

題名のエラーは下記のように吐かれたものでした

“`
Traceback (most recent call last):
1: from /Users/kontatomoya/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute’
/Users/kontatomoya/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute’: Exception while executing as ec2-user@3.115.38.38: bundle exit status: 1 (SSHKit::Runner::ExecuteError)
b

元記事を表示

MPAのrailsの中にvueで部分的にSPAを作るwith Docker

# なぜそんなことをしたのか
その昔、業務委託でジョインした副業先の既存プロダクトにメッセージ機能の新規機能追加の担当して
当時本業でvueをよく触っていたため

# 技術選定で結構迷った
当時、本業の方は完全なSPAだったのでrailsから分離させてvuecliで開発していたが
副業先はMPAだったため

## WebpackでやるかWebpackerでやるか
答え: Webpacker

理由: 既存のslimのテンプレートエンジンのlayoutを流用するため あと、なんだかんだWebpackerにしてよかった気がする

# やっていく
※mysqlなど入れず最小構成でやります
※dockerの設定やrails、vueの文法や扱いなどはある程度わかっている前提として、細かい解説は省略します

# 1. vue入りのrailsプロジェクトを作る
## 適当なディレクトリを作りDockerで準備していく

“`dockerfile:Dockerfile
FROM ruby:2.6.1

ENV LANG C.UTF-8
ENV TZ=Asia/Tokyo

WORKDIR /usr/

元記事を表示

OTHERカテゴリの最新記事