- 0.0.1. DockerComposeをdevelopmentで実行する
- 0.0.2. Dockerを導入したRailsをAWSでデプロイ
- 0.0.3. rails5アプリのローカル開発環境メモb
- 0.0.4. Invalid nextでハマった
- 0.0.5. Sinatraでニコニコ動画の投稿◯周年ちょうどの動画一覧を表示するWebアプリを作った
- 0.0.6. Ruby on Jets で詰まったこと
- 0.0.7. [Ruby]クラスについて
- 0.0.8. google api ruby client の service account の auth で任意の認証情報を指定する方法
- 0.0.9. n+1問題を呪術廻戦で例えました
- 1. n+1問題とは
- 2. 夏油傑の術式
- 2.0.1. An error occurred while installing racc (1.5.2), and Bundler cannot continue. / You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
- 2.0.2. Rubyの繰り返しstepについて
- 2.0.3. Rubyアルゴリズム(Array Partition I)
- 2.0.4. 【Ruby】任意の範囲の数値で配列を作る
- 2.0.5. 【Rails】コントローラーの同じアクション内で、条件によってrenderを複数使う方法
- 2.0.6. Railsチュートリアル(第6版) 第5章 まとめ
- 2.0.7. Devise 導入方法
- 2.0.8. RSpecでimgタグのオプションをテストする(alt, srcなど)
- 2.0.9. NoMethodError (undefined method `upload’ for nil:NilClass):の解決法。
- 2.0.10. TypeError (no implicit conversion of Symbol into Integer)のエラー対応
- 2.0.11. esa.io.tar.gz プログラミング
DockerComposeをdevelopmentで実行する
これまで、production環境で開発をしてきた。
Dockerを導入し、AWSでのデプロイを試みている。しかしそれは、他の記事を参考に作っていた為、
意味もわからず、本番環境でやってきただけで、
必要な構成も理解していないので上手く進まなかった。そこで、development環境に戻し、
まずはDockerの導入にフォーカスして理解度を高めていく。***
#### 各ファイルの修正
“`ruby:docker-compose.yml
services:
local-redis:
image: redis
container_name:
rails-redis
container_name: rails-redislocal-rails:
build: .
@@ -15,9 +14,31 @@ services:
– local-redis
env_file:
– env_file.env
container_name:
rails-rails
con
Dockerを導入したRailsをAWSでデプロイ
#### 接続状態の確認
“`
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6896cfc00d7f redis “docker-entrypoint.s…” 2 months ago Up 4 days 6379/tcp rails-redis
“`“`
$ curl -G ‘http://localhost:3000’
curl: (7) Failed to connect to localhost port 3000: 接続を拒否されました
“`“`
$ netstat -na | grep -i 3000
“`
何も表示されなかった。– Railsの起動がうまくいっていない。
– 原因はcredentials周り
rails5アプリのローカル開発環境メモb
#ローカル開発環境をスムーズに行うために簡素版
ローカルの開発の時に急に詰まることありませんか?
僕は、ちょいちょいエラーが起きてしまうことがあるので、
備忘録としてこのメモを残します。
注意としては、Rails6には慣れていないので、Rails5を選んでいます。##開発環境
macOS Bigsur 11.3.1
Ruby 2.7.2
Rails 5.2.6
Bootstrap 4.5.0
Devise– – –
##準備開始
“`ruby:初期処理
#最初に行うのはinit
bundle init#このオプションを入れることで、プロジェクトのvendor/bundle以下にgemが格納される
bundle install –path vendor/bundle#ここで、いよいよrailsをインストール
bundle exec rails new . -B –skip-turbolinks
#herokuへデプロイするならpostgrsqlを選択
bundle exec rails new . -B -d postgresql#今回はこれ
bundl
Invalid nextでハマった
### 概要
– ループ内にあったnextをインスタンスメソッドとして切り出したら構文エラーとなりハマった
– nextはブロックのコンテキスト外では使用できないよという当たり前な話### 経緯
外部から受け取ったCSVファイルを一行ずつ読み取り、各行から所定のデータを作成するメソッドがrubocopにてMetrics/Abcsizeオーバーの疑いにより逮捕されたので、脱獄のためしこしことリファクタリングをしている最中、それは起こった。該当のメソッドは下記のような内容となっており、CSVを一行ごとeachで回して各行に不正な値が紛れ込んでいた場合エラーログをスラック通知してnextするというもの。
実際のコードではあと二つ別のモデルに対して似たような処理を行なっていたため、それらをモデルへの処理単位でインスタンスメソッドとして切り出そうという方針を立てた。
“`ruby
CODE = 0
departments = Department.all.map { |d| [d.code.to_i, { id: d.id }] }.to_hCSV.parse(str.enc
Sinatraでニコニコ動画の投稿◯周年ちょうどの動画一覧を表示するWebアプリを作った
# 作ったもの
Rubyの勉強の一環として,Nicoversary!というWebアプリを作りました。
(タイトルは Niconico + Anniversary から付けています)### どんなアプリ?
ニコニコ動画の動画では,「〇〇周年記念にまた見に来た」という内容のコメントを見かけます。
特定の日付に投稿された動画を再生数順で表示できるアプリがあったら,古い動画もまた盛り上がるのかなと思い,作りました。### Herokuにデプロイしたもの
https://nicoversary.herokuapp.com/
### GitHubリポジトリ
https://github.com/kg9n3n8y/hyakunin_isshu_bot
## 参考イメージ
## 機能
“/”(ルートパス)
Ruby on Jets で詰まったこと
# はじめに
エンジニアとして就職して約1年、 久しぶりにRuby を書いてみたいなぁ、とふと思う。
最近流行りで弊社でもガンガン採用しているサーバーレスで実装しようということに。
「サーバーレス Ruby」 で検索すると一番最初にヒットした Ruby on Jets
https://rubyonjets.com/
https://dev.classmethod.jp/articles/ruby-jets-serverless/
https://qiita.com/kskinaba/items/9c570093ed912f8f1681
すごい使いやすそう。。ほぼrails と使い方も同じだし。。
と思ったがいろいろとハマって腹がたったので記事にしましたww
# 腹立ちポイント
## (その1) ruby 2.6 だけサポートされてない。
Ruby on Jets がサポートしている ruby のバージョンは 2.5 と 2.7 らしいです。
2.6 でもアプリの作成はできますが、デプロイでこけます。
## (その2) jets deploy でハマった
[Ruby]クラスについて
#はじめに
Rubyのクラスについて改めて理解を深めるために、こちらの記事でまとめます。#クラスとインスタンス
Rubyではデータの元となる設計図を作り、その設計図を元に実体となるデータを作ります。
その設計図のことをクラスといい、データをインスタンスといいます。このクラスは親子関係を作ることができ、既存のクラスの情報を元に新しいクラスを作れます。
いわゆる「クラスの継承」です#クラスの継承
クラスの継承とは既存のクラスを元に新しいクラスを作ることです。
このとき、新しいクラスを子クラスまたはサブクラス、元になったクラスを親クラスまたはスーパークラスと呼びます。このクラスの継承という概念があることで、共通部分がまとめられるため非常に便利になります。
例えば、新幹線、地下鉄、汽車のクラスを作成するならば、3つに共通する情報をまとめた電車クラスを作成し、その電車クラスを継承したクラスを作成したほうが効率的なわけです。各クラスは、電車クラスをもとに各々の機能を付け加えていけばいいわけです。
例えば、電車に共通する走る、止まるといった機能に加えて、新幹線では車内販売、地
google api ruby client の service account の auth で任意の認証情報を指定する方法
# 概要
google api を ruby から service account を使って実行するときは認証情報の入った json を指定するか“`ruby
scope = ‘https://www.googleapis.com/auth/androidpublisher’authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
json_key_io: File.open(‘/path/to/service_account_json_key.json’),
scope: scope)authorizer.fetch_access_token!
“`
抜粋: https://github.com/googleapis/google-auth-library-ruby#example-service-accountライブラリ側で指定されている特定の環境変数に値を設定する方法があります。
“`ruby
require ‘googleauth’
require ‘google/apis/
n+1問題を呪術廻戦で例えました
こんにちは!
n+1問題がわかんなくて今週仕事の合間に
ずっと調べて記事にしようと思ってました。
ただただ自分のアウトプットをしてるだけだと
なんか嫌々記事書いてるみたいで楽しくないし、
そもそもn+1問題に関する記事なんて腐る程あると
思うので僕の大好きな呪術廻戦を交えて
説明して行こうかなと思います。この記事ではn+1問題の具体的な説明を
僕的に分かりやすく抽象化したものなので
もっとコード用いた具体例を見たい!って
人は他のブログ見てください。てか一回n+1問題の記事をみてわけわからんかったら
この記事見てからもう一回見てみてね。あと呪術廻戦知らない人ゴメンなさい。。。
ネタバレも含んでいるからあんまり見たくない人は
ここで読むのやめてください!!n+1問題とは
そもそもN+1問題とは
テーブル間にアソシエーションが
組まれている際に、データベースへの
アクセス回数が多くなり、
アプリケーションのパフォーマンスが
低下してしまいます。
さてこれを呪術廻戦で例えていきましょう。夏油傑の術式
何で例えようかと思いましたが、
An error occurred while installing racc (1.5.2), and Bundler cannot continue. / You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
rails newしたさいに以下のエラー
“`
An error occurred while installing racc (1.5.2), and Bundler cannot continue.
“`以下を実行してみる
“`
gem install racc -v ‘1.5.2’ –source ‘https://rubygems.org/’
“`なんか権限系のエラーがでた :thinking:
“`
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
“`いろいろ調べてたら、rbenvでインストールしたrubyではなく、systemのrubyを使っていると出たりするらしい。
systemのrubyを使ってる場合は`which ruby`と実行すると、`/usr/bin/ruby`とかえるそうだ。
ただ自分の場合、`/Users/ユーザ名/.rbenv/shims/ruby`とかえることから、すでにrbenvでrubyを管理していた。うーむ謎
Rubyの繰り返しstepについて
Rubyの学習においてstepというものを学習したので
備忘録を兼ねて書いておきます。nからmまで数値をxずつ増やしながら何らかの処理を実行したいときに利用します。
構文は
`開始式.step(上限式,一度に増減する大きさ)`
のように書きます。例
1から10まで2ずつ増やしたい時“`ruby
1.step(10, 2) { |n| puts n}
“`
出力結果`1
3
5
7
9
`10から1まで2ずつ減らしたい時
“`ruby
10.step(1, -2) { |n| puts n}
“`出力結果
`10
8
6
4
2
`
Rubyアルゴリズム(Array Partition I)
## 問題
Given an integer array nums of 2n integers, group these integers into n pairs (a1, b1), (a2, b2), …, (an, bn) such that the sum of min(ai, bi) for all i is maximized. Return the maximized sum.
“`
Example 1:Input: nums = [1,4,3,2]
Output: 4
Explanation: All possible pairings (ignoring the ordering of elements) are:
1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3
2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3
3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4
So t
【Ruby】任意の範囲の数値で配列を作る
# Range クラスを利用する
“`ruby
nums = [*1..10]
# => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
“`# to_aメソッド
“`ruby
nums = (1..10).to_a
# => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
“`
【Rails】コントローラーの同じアクション内で、条件によってrenderを複数使う方法
##はじめに
RailsをAPIモードで開発中にコントローラー内で例外処理を増やしていくのではなく、
renderで例外処理用のHTTPレスポンスを返したいなと思い、
ベストプラクティスを自分なりに考えたのでメモを残したいと思います。##経緯
下記のような、例外判定の条件が羅列しているのを改善したいと思ったのがきっかけでした。
というのも、独自例外クラスで細かく例外処理を制御している場合は以下のような書き方のほうが、多少冗長でもわかりやすいなと思います。
ただ、“ActiveRecord::NotFound“に例外を集めているのに違和感だったので、何か改善できないかとググり始めたのが経緯です。
“`hoge_controller.rb
.
.
.def create
if #投稿時等に該当するバリデーションの条件
raise ActiveRecord::NotFound, ‘エラーメッセージ1’
endif #投稿時等に該当するバリデーションの条件
raise ActiveRecord::NotFound, ‘エラーメッセージ2’
Railsチュートリアル(第6版) 第5章 まとめ
#第5章
第5章はレイアウトに関する事柄が大半。
具体的には、HTML、CSS、Bootstrap(Twitter社が公開しているやつ)、Asset Pipeline等を用いて、レイアウトを良い感じにしていく。
また、最後に統合テストについての紹介がある。##構造を追加
Twitter社のWebデザインフレームワークの`Bootstrap`を利用する。また、パーシャル機能を使ってコードを整えていく。
Viewの画面だけではなく、コードも可読性を上げるというのが目標。Webアプリケーションを作るときは、モックアップといってユーザーインターフェースの概要を作成しておくと良い。
###ナビゲーション
まずは、リンクとスタイルを追加するために`application.html.erb`にHTML構造を追加する。“`html
<%= full_title(yield(:title)) %>
<%= csrf_meta_tags %>
<%= csp_meta_ta
Devise 導入方法
# Deviseとは
### Railsで作成したアプリケーションへ簡単に認証機能を実装することができるgem(ライブラリ)のこと。
>[こちらの記事をを参照させていただきました](https://diveintocode.jp/blogs/Technology/Devise#:~:text=Devise%E3%81%A8%E3%81%AFRails%E3%81%A7,%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E5%87%BA%E6%9D%A5%E3%81%BE%E3%81%99%E3%80%82)# 導入方法
“`ruby:Gemfile
gem ‘devise’
“`
> * Gemfileにdeviseを記述“`terminal:ターミナル
% bundle install
% rails g devise:install
% rails g devise user
#追加カラムがある場合、ここでマイグレーションファイルの編集
% rails db:migrate
% rails g devise:views
RSpecでimgタグのオプションをテストする(alt, srcなど)
### 前提条件
以下がユーザーのアバター画像を表示させるヘルパーメソッドである
“`ruby:application_helper.rb画像を表示させるヘルパーメソッド
def display_avatar_for(user, size: Settings.avatar_size[:in_feed])
resize = “#{size}x#{size}^”
crop = “#{size}x#{size}+0+0”
avatar = user.avatar
image_tag(avatar.variant(gravity: :center, resize: resize, crop: crop).processed, alt: “#{user.username}”, class: “avatar”)
end
“`“`ruby:実際に生成されるHTMLのimgタグ
NoMethodError (undefined method `upload’ for nil:NilClass):の解決法。AWSのS3の導入過程でで画像を投稿すると、上記のエラーが。
環境変数のキーを確認しても間違いは無かったです。
“`
def create
@item = Item.new(item_params)
if @item.save #<=ここでエラーが出ます redirect_to root_path else render action: :new end end ``` エラーが文をコピーして検索すると、同じようなエラーの記述がありました。環境変数を使えるようにするためのコマンドsource ~/.zshrcを忘れていただけでした。
TypeError (no implicit conversion of Symbol into Integer)のエラー対応
# エラー内容
“`
TypeError (no implicit conversion of Symbol into Integer)
“`hashでjsonから値を取りに行ったら上記エラーが
状況
– rails
– ruby# エラーの原因
`no implicit conversion of Symbol into Integer`は数値が来るべきところにsymbolが来ちゃっているよという意味。hashだと思って下記で指定したんだけど
“`
[:items][:data][:price][:product]
“`配列だったので
“`
[:items][:data][0][:price][:product]
“`としたら解決。
stripeのsubscriptionを取得しに言ったんだけどよく見たら{}じゃなくて[]だった。
https://stripe.com/docs/api/subscriptions/retrieve
esa.io.tar.gz プログラミング
“`esa.io.tar.gz
esa.io/d2e-master.zip
esa.io/feedback-sync-master.zip
esa.io/hello-esa-master.zip
esa.io/html-js-projs-master.zip
esa.io/inuicon-rails-master.zip
esa.io/middleman-esa-master.zip
esa.io/nyauth-master.zip
esa.io/omniauth-esa-master.zip
“`
.tar.gzファイルを介して圧縮されたesa.ioパケット 記事で取り上げたソフトウェアのバージョンは何か、記事中のコードを実行するためにはどんな手順が必要かを書いておくと、自分の環境に当てはまるかどうかを後から読む人が判断しやすくなります。https://github.com/esaio
https://ppworks.jp/