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

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

docker-composeで環境構築する際、railsサーバーのコンテナが起動しないときの対処法

##記事の目的
railsのコンテナをdocker-composeで立ち上げる際に発生したコンテナが起動しない問題に対しての対処法を共有すること。

## 状況
“`$ docker-compose up -d“`でコンテナを立ち上げる。

“`
$ docker-compose up -d
rails_db_1 is up-to-date
Starting rails_web_1 … done
“`
“`$ docker-compose ps “`で現在のコンテナの中身を確認したところ、

“`
$ docker-compose ps
Name Command State Ports
————————————————
rails_db_1 docker-entr Up 3306/tcp,
ypoint.sh 33060/tcp
mysq

元記事を表示

Railsでsqlite3からpsglに乗り換えてみた!(途中から)

## 今回やること
#### (psglはインストールされている前提で話を進めます!)
– gem “pg”
– config/database.ymlを変更
– エラーにどのように対応したか

## gem “pg”を入れる
sqlite3はコメントアウトするか、削除

“`
gem ‘pg’, ‘~> 0.18.4’
“`
bundle installをし、すんなり行けばおっけー!ちなみに僕はすんなりいきませんでした。それはエラーにどのように対応したかの項目で紹介します!

## config/database.ymlを変更
“`rb

default: &default
adapter: postgresql #変更
encoding: unicode
pool: 5
host: localhost #追加
development:
<<: *default database: appname_development # appnameのところは、db/development.sqliteになっているはずなので、変更 test: <<: *de

元記事を表示

Rails6 の Zeitwerk と XXXHelper の DEPRECATION WARNINGと OmniAuth

あるプロジェクトを Rails 6 にアップグレードしたら、DEPRECATION WARNING が出るようになりました。

“`
DEPRECATION WARNING: Initialization autoloaded the constants ApplicationHelper, AaaHelper, BbbHelper, …, ActionText::ContentHelper, and ActionText::TagHelper.
“`

# ApplicationHelper で grep する

なるほど〜。これは、[例の Zeitwerk のワーニングだな](https://qiita.com/jnchito/items/b8f40e7fe82b07bc3de8)とピンと来た私は、
`config/initializers` 内のファイルとかで `ApplicationHelper` を参照しているのかと思い、`ApplicationHelper` で grep してみたのでした。

すんなり解決できるかと探してみましたが、 `app/helpers/a

元記事を表示

【Rails】rails sのログに「Cannot render console from !」と出たときの対処法

## はじめに
以下エラーが**Docker環境**のRailsアプリ開発中に発生しました。
対処法について記載します。

画面は`rails s`のログから切り取ったものです。

“`shell
Cannot render console from 172.23.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
“`

## 環境
“`yaml
OS: macOS Catalina 10.15.1
Ruby: 2.6.5
Rails: 6.0.2.1
Docker: 19.03.5
docker-compose: 1.24.1
“`

## 結論:対処法
`config/environment/development.rb`に以下**ホワイトリスト**を追記します。

“`
Rails.application.configure do
…略
config.web_console.whitelisted_ips = ‘172.23.0.1’ #追記
…略
end
“`

これで**無事に動く**ようになり

元記事を表示

マイグレーションファイルのdef upとdef self.upの違いについて調べてみた②

## はじめに
[前回の記事](https://qiita.com/knog/items/288ad6d53a9a145924a8)で`nearest_delagate`がなんなのか分からず、中途半端に終わってしまいました。
今回はその続きです。migrateタスクが定義されているところから追いかけてみようと思います。

ちなみに前回と同じくマイグレーションファイルが下記のようなものだとして話を進めます。

“`
class CreateUsers < ActiveRecord::Migration[5.2] def up create_table :users do |t| t.string :name t.timestamps end end end ``` ## 環境 ruby 2.6.3 rails 5.2.3 ## active_record/railties/databases.rake ``` db_namespace = namespace :db do desc "Migrate the databas

元記事を表示

SQLite3::BusyException: database is locked: エラー

####環境:

“`
Rails 5.1.7
“`

####エラー内容:
SQLiteのカラムを少し変更してから、DBにフォームを送るとサーバー上で下記のようなエラー検出

“`
ActiveRecord::StatementInvalid (SQLite3::BusyException: database is locked: INSERT INTO “budgets” (“budget_type”, “price”, “memo”, “created_at”, “updated_at”) VALUES (?, ?, ?, ?, ?)):
“`
####エラー原因:
DB Browser for SQLite(SQLite管理ソフト)内でのデータ更新のし忘れ

####試したこと:

① ターミナルで rails c して

“`
ActiveRecord::Base.connection.execute(“BEGIN TRANSACTION; END;”)
“`
を打つ => 失敗

② config/database.yml内の、timeoutの値を5000から

元記事を表示

rails6のDockerfileを書く

[rails5のDockerfileとdocker\-compose\.ymlを書く \- Qiita](https://qiita.com/yoshinyan/items/e1f801d6df422d5b7f88)
こちらのRails6バージョンです。

Dockerfile自体より6になったことでyarnが必要になり、さらにアップデートする必要があるところで時間がかかってしまいました。

“`bash:Dockerfile

FROM ruby:2.6

RUN apt-get update -y && \
apt-get install default-mysql-client nodejs npm -y && \
gem install rails –version=’6.0.1′ && \
npm uninstall yarn -g && \
npm install yarn -g -y

COPY Gemfile /Gemfile
COPY Gemfile.lock /Gemfile.lock

RUN bundle install

元記事を表示

deviseをi18nを使って日本語化する

#環境
Ruby 2.5.1
Rails 6.0.2

# devise.ja.ymlの導入

[こちら](https://qiita.com/you8/items/921e0dd1210eb0d158df)を参考にさせてもらってdeviseを日本語化した際に、いくつか違ったので、メモ書きしておく

## gemを導入

“`
gem ‘devise-i18n’
“`

上記のgemを導入した後に、

“`
$rails g devise:views:locale ja
“`
これを実行。

>Running via Spring preloader in process 70886
Deprecation warning: Expected string default value for ‘–controller’; got false (boolean).
This will be rejected in the future unless you explicitly pass the options `check_default_type: false` or ca

元記事を表示

Rails6 Lost connection to MySQL server during query というエラーが出て困った話

# 目的

– ローカル開発環境にてRailsアプリをブラウザから確認したところ`Lost connection to MySQL server during query`のエラーが出て困った話をまとめる

# 結論

– mysqlの再起動、Railsアプリの再起動を実施したところ正常に戻った。

# エラーまでの経緯

1. ローカル開発環境での確認をしたくてコマンド`$ mysql.server start`を実行した。
1. Railsのアプリを起動するためにコマンド`$ rails s`を実行した。
1. ブラウザにてアプリを確認したところ下記のエラー発生。

“`terminal
Lost connection to MySQL server during query
“`

# 原因究明

– 公式ドキュメントを閲覧したところ下記の内容を発見した。
– [https://dev.mysql.com/doc/refman/5.6/ja/packet-too-large.html](https://dev.mysql.com/doc/ref

元記事を表示

初学者によるプログラミング講座 #1 Ruby/Railsとは

# はじめに
今回はRubyとRailsの特徴を簡単にまとめました
これから勉強される方の助けになればと思います
まだまだひよっこですので、間違っている点等ありましたらご指摘いただければ幸いです

# Rubyとは
スクリプト言語と呼ばれるプログラミング言語
プログラミング言語には、「コンパイラ言語」と「スクリプト言語」と言われる部類の言語がある
また、オブジェクト指向言語でもあるため、記述量が少なくすんだり、コンパイルの時間がかからない
だから生産性が高いと言われている

## 「コンパイラ言語」と「スクリプト言語」って?
– コンパイラ言語
コード実行に事前に全てを翻訳してから実行する
主に C,C++,Java,C#等

– スクリプト言語
各コード実行時に、随時翻訳しつつ実行する
主に Ruby,JavaScript,Python,PHP等

上記のような違いがありますが、そもそも、人間が書いたコード(わかりやすく言うと人間語)はそのままでは機械には伝わらない
機械が実行するには(機械語に)翻訳する必要がある
コンパイラ言語はコンパイラーを使用してコンパイル(翻訳)する必要があ

元記事を表示

Railsチュートリアル 第13章 ユーザーのマイクロポスト – マイクロポストを表示する

# 前提

マイクロポストの表示は、「ユーザーのshowページで直接マイクロポストを表示する」という形式で実装していくことになります。

Railsチュートリアル本文では、[図 13.4](https://railstutorial.jp/chapters/user_microposts?version=5.1#fig-user_microposts_mockup)というモックアップが示されています。

本項目では、以下の実装を行っていきます。

1. ユーザープロフィールにマイクロポストを表示させるためのERbテンプレートを作成する
2. サンプルデータ生成タスクにマイクロポストのサンプルを追加し、画面にサンプルデータが表示されるようにする

# マイクロポストの描画

実装内容としては、Railsチュートリアル本文第10章の[10.3 すべてのユーザーを表示する](https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-showing_all_users)に類似している、とのことです

元記事を表示

Railsチュートリアル 第13章 ユーザーのマイクロポスト – マイクロポストの描画

# 開発環境のデータベースのリセット

演習等で生成したマイクロポストの影響を排除するため、一旦開発環境のデータベースをリセットします。

“`
# rails db:migrate:reset
Dropped database ‘db/development.sqlite3’
Dropped database ‘db/test.sqlite3’
Created database ‘db/development.sqlite3’
Created database ‘db/test.sqlite3’

== [timestamp] CreateUsers: migrating ======================================
— create_table(:users)
-> 0.0186s
== [timestamp] CreateUsers: migrated (0.0202s) =============================

…略

== [timestamp] CreateMicroposts: migrating ====

元記事を表示

simple_formのエラーメッセージを表示できるようにする

### はじめに
bootstrapでsimple_formを使っているのですがエラーメッセージを表示させる際にてこずったのでその記録を載せます

[simple_form_bootstrap.rb](https://github.com/plataformatec/simple_form/blob/b80775bd45b62554ce401d0b60355eb6fcd17bba/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb)

### やったこと

![スクリーンショット 2019-10-31 16.43.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333068/df79020d-47d4-b640-0f24-f8a78d5d343a.png)

上のように生年月日が未入力の際にエラーメッセージを表示させようとしたのですが表示されませんでした。
localをいじってもうまくい

元記事を表示

Railsチュートリアル 第13章 ユーザーのマイクロポスト – マイクロポストのサンプル

# サンプルデータにマイクロポストを追加する

## マイクロポストを追加するのは最初の6人のユーザーのみ

Railsチュートリアル本文の手順通りに進めてきたのであれば、サンプルアプリケーションには100人ほどのユーザーが存在するはずです。その全てにマイクロポストを追加していくのは、いくら自動生成するといっても非常に時間がかかってしまいます。というわけで、「マイクロポストを追加するのは最初の6人のユーザーのみ」とします。

以下のコードにより、「最初の6人のユーザーにのみマイクロポストを追加する」という動作が実現されます。

“`ruby:
User.order(:created_at).take(6)
“`

ポイントは以下です。

* 「最初に作成されたユーザーから」という動作を実現するために、メソッドチェーンに`order(:created_at)`を含めている
* 「6人のユーザーを対象とする」という動作を実現するために、`take(6)`というメソッドを実行している

### マイクロポストを追加していくためのコード

上記6人のユーザーに対しては、1人あたり50個のマ

元記事を表示

メモ: Railsで全テーブルと全カラムのテーブル定義書風のTSVを出力

この記事は
===

* 完全なる個人メモです
* RailsのDBからテーブル定義書ちっくなtsvを出力するスニペットを書いたので貼っておきます

スニペット
===

“`lib/tasks/export_table_tsv.rake
namespace :export_table_tsv do
task run: :environment do
ActiveRecord::Base.connection.tables.each do |table|
table_ja = I18n.t(“activerecord.models.#{table.singularize}”)
eval(table.singularize.camelize + “.column_names”).each do |column|
column_ja = I18n.t(“activerecord.attributes.#{table.singularize}.#{column}”)
puts “#{table}\t#{table_ja}

元記事を表示

gem bulletを一時的に使いたくない時の対処法

### Gemtips

“gem ‘bullet’“を使いたくない時

下記を参考にbulletを設定する

“`ruby
# config/environments/development.rb

# bullet settings
config.after_initialize do
Bullet.enable = true
Bullet.bullet_logger = true
Bullet.console = true
Bullet.alert = true
Bullet.add_footer = true
end
“`
– “Bullet.enable = false“とすると機能しなくなる
– “Bullet.enable = false“ とすると警告のアラートが消える

元記事を表示

[Rails][file_field]画像のアップロードのボタンデザインを変更する

Railsのアプリを作っている際に画像アップロードボタンのデザインを変えたかったが、
クラス名をつけるだけでは上手くいかなかったのでメモ。

# 初めの状態

普通にコードを書いた場合はこのようなデザインになるかと思います

“`ruby
= p.file_field :image_file
“`

![ 2019-12-26 11.40.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532695/18a39c9d-8585-e07b-a8e1-7642c5d75251.png)

もっとかっこいいデザインにしたいので、変更していきます。

## 変更するとき

file_field以外にlabelを追加します。

“`ruby
= p.label :image_file, “画像をアップロード”, class: “image_input_btn”
= p.file_field :image_file, class: “image_form”
“`
どちら

元記事を表示

Railsでアクションごとにレイアウトを設定する方法

Railsでアクションごとにレイアウトを設定したい場面って結構あるので、解説とかありませんが、方法だけお伝えしたいと思います。

“`Ruby
class ProfilesController < ApplicationController layout :resolve_layout def new @profile = Profile.new end def show @profile = Profile.find(params[:id]) end def edit @profile = Profile.find(params[:id]) end private def resolve_layout case action_name when "new", "edit" "devise" when "show" "main"

元記事を表示

初学者が今すぐできるRailsポートフォリオのリファクタリング7つ

転職活動中に作成した[自分のポートフォリオ](https://www.doya.life/)を見返していると、クソみたいにコードが汚かったので、リファクタリングしたことをまとめました。これから転職活動をしたりする人の参考になれば、と思っています。リファクタリングしたのが[このリポジトリ](https://github.com/kenzoukenzou/doyaapp)なのでcloneして、中身をみつつ記事の内容を参考にして頂ければと思います。

### インデントを揃える。

インデントが揃っていないとそれだけで、大幅にやる気を削がれてしまいます。Rubyのプロジェクトではインデントは半角の空白が2つなので、これに合わせるようにしましょう。

`editorconfig`を入れおくとインデントサイズを指定できるので、まだ設定していない人は設定しておくことをおすすめします。

– 参考1: [coopad/styleguide – Github](https://github.com/cookpad/styleguide/blob/master/ruby.ja.md#indentatio

元記事を表示

find_or_initialize_byの使い方

#find_or_initialize_byって?
モデルから渡したパラメーターに該当するものを探してくれるんだけど、あればそれを返すし、なかったらnewしてインスタンスを作ってくれるみたい!

似たようなメソッドで`find_or_create_by`という`create`してくれるものもあるらしい。

`profile.update_attributes(profile_params)`でバリデーションにひっかからなかったら(`create`or`update`してくれる!)

“`reviews_controller.rb

def create_profile
session[:review_area_key] = params[:review_area_key]
session[:review_provider_id] = params[:review_provider_id]
session[:review_plan_id] = params[:review_plan_id]

profile_params = params.per

元記事を表示

OTHERカテゴリの最新記事