- 1. Ruby 例外処理について
- 2. [頭の体操] 逆ポーランド記法の列挙とその計算
- 3. imagemagick@6をソースからインストールしたい
- 4. Ruby on Railsのシード機能についてのメモ
- 5. [ruby]特定条件のみに呼応するプログラムの作成
- 6. DockerでRailsチュートリアルのローカル開発環境構築 – RSpec導入 & CircleCIでHerokuデプロイ-
- 7. GitHubでMiniMagickの脆弱性アラートが出た際の解決方法
- 8. 【webpacker】Rails6.0でのBootstrap, jQueryの導入方法まとめ
- 9. 今日のメモ(添字演算子、多重代入)
- 10. Active Storage 導入環境下での単体テスト
- 11. TodoじゃなくてNoTodoアプリをリリースした。。(とridgepoleの注意点)
- 12. Googleアナリティクスを活用し、サイト分析を行う-1章
- 13. DockerでRailsチュートリアルのローカル開発環境構築(Rails 6 + PostgreSQL + Webpack)
- 14. Rails herokuにデプロイ後にAPIキーが見当たらなかった時の解決方法
- 15. Puma – Nignx って環境で rails s -e production -d でうまくいかない時の逃げ道
- 16. 【orderメソッド】Railsで、データの並び順を設定する
- 17. syntax error [each do end のエラー]
- 18. [ruby]ドリルアウトプット
- 19. Railsのルーティングついて
- 20. activerecord-importでUpdateする方法
Ruby 例外処理について
# 例外処理とは
例外処理を行うことで、エラー原因やエラー箇所の特定や、発生したエラーに対する適切な処理を行うことができます。本記事では、以下について紹介していきます。
– rescue
– ensure
– return
– rescue修飾子
– 特殊変数 `$!` `$@`
– メソッド全体に例外処理を設ける(begin/endの省略)
– raise
– カスタム例外を作成## rescue
以下のようにbeginの下に、通常実行したいプログラムを記述します。
そのプログラムの実行中に例外が発生した場合に、呼び出したいコードをrescueの下に記述します。“`ruby
begin
p “実行するコード”
rescue
p “例外が発生した場合に実行されるコード”
end
“``結果`
“`
“実行するコード”
“`### else
rescueに、elseを付け加えることによって
例外が発生しなかった場合に呼び出したいコードを追加できます。“`ruby
begin
p “実行するコード”
rescue
p “例外が発生した場
[頭の体操] 逆ポーランド記法の列挙とその計算
# 列挙
`[1, 2, 3, 4]`を与えられた時に四則演算ですべてのパターンを列挙する
“`rb
require “set”
NUMBERS = [1, 2, 3, 4]
SIGNS = %i[+ – / *]results =
NUMBERS.permutation(4).to_a.uniq.each.with_object(Set.new) do |numbers, results|
(SIGNS * 3).permutation(3).to_a.uniq.each do |signs|
a, b, c, d = numbers
x, y, z = signs[c, d, x, y].permutation(4).to_a.uniq.each do |combination|
match = combination.join.match(/\A([^\d]+)/)
next if match and match[1].size == 2results << ([a,
imagemagick@6をソースからインストールしたい
●目的
古いMacOSでhomebrewが使えなくなった。
ruby gemであるkindai.rbを動かす為、openssl、curlやimagemagick@6をソースからインストールしたい。
他にはgemのrmagick、kindai.rbなど。
大量のインストールログがある為、2020-08-07現在追記予定あり。●参考リンク
[circleci(Ubuntu 12.04)にimagemagickをパッケージからインストールする – Qiita](https://qiita.com/imunew/items/bd2cd276e93bc4545323)上記URLのaptitudeとは?
[apt、apt-get、aptitudeの違い – ULTRA GENMA](http://ultra-genma.hateblo.jp/entry/2019/04/08/233718)[CentOS 7x OSの初期状態からImageMagickを動かす方法 | Search Light(CakePHP PHP jQuery JavaScript CSS Linux MySQL
Ruby on Railsのシード機能についてのメモ
# はじめに
初心者です。
RubyとRuby on Railsを使ってアプリケーションを作っています。
備忘録も兼ねておりますので、間違いなどあればご指摘ください。# シード機能とは
データベース作成後に、初期データを簡単に流し込むことができる機能。
# どのファイルを使うのか
`db/seeds.rb`に初期データとして流し込みたいコードを記述して、
ターミナルで`rails db:seed`すればOK。
実行してもターミナルに何か表示されるわけではないが、データに問題なければ流し込まれているはず。#ファイルにはどう記述するのか
例)productsテーブルのnameカラムとdescriptionカラムにデータを5つ流し込む
“`ruby
5.times do |i|
Product.create(name: “Product ##{i}”, description: “A product.”)
end
“`timesメソッドを使っているが、1行ずつ書いていっても問題なし。
# まとめ
– シード機能はデータベース作成後に初期データを流し込むこと
[ruby]特定条件のみに呼応するプログラムの作成
## 内容
今日の曜日を表示するコードをDateクラスを使用して記述してください。
ただし、金曜日だった場合だけ以下のように表示の内容を変えてください。(出力内容)
「今日は月曜日」
「今日は金曜日だ !!!」## 実装
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675525/8017ac08-786e-2494-618c-f80c67307897.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675525/40606f23-e065-2981-c795-88130358996d.png)## 解説
今回はRubyで日付を扱うため、ライブラリであるDateクラスを使用します。
1行目でライブラリからDateクラスをよびだします。
3行目でwdayメソッドを使用し、0(日曜日)〜6(土曜日)の整数にした時の今日の値を取得することができます。
※値なので取得できるのは
DockerでRailsチュートリアルのローカル開発環境構築 – RSpec導入 & CircleCIでHerokuデプロイ-
# はじめに
前回の記事
[DockerでRailsチュートリアルのローカル開発環境構築(Rails 6 + PostgreSQL + Webpack) – Qiita](https://qiita.com/daddy_hacker/items/99225bf3d8665ecfdec2)個人開発アプリ
[mdClip <オンラインmarkdownエディタ>](https://mdclip.xyz/)前回の記事に続いて、Railsチュートリアルのローカル開発環境構築を行っていきます。
– Railsチュートリアル最新版(2020.8.6現在)に対応のRails 6
– Dockerを使用し、開発環境の再現が可能
– なるべくローカル環境にインストールしない
Docker環境で操作する場合はターミナルのコマンドを適宜
“`
$ docker-compose run app …
“`もしくは
“`
$ docker-compose exec app …
“`で置き換えてください。
# Rspec導入
minitestでも問題ないです
GitHubでMiniMagickの脆弱性アラートが出た際の解決方法
# 現象
RailsアプリをGitHubにプッシュした所、mini_magickに関する脆弱性のアラームメールが届いた。
解決までの備忘録として残しておく。# 問題と原因
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682425/f88633c3-138c-1b64-e812-955d34597094.png)
mini_magickのバージョンが古く、フェッチされたリモートイメージファイル名がリモートコマンドの実行を引き起こす可能性があるとのこと。
解決するには、バージョンをアップグレードすれば良さそう。## GemFileを編集する
“`ターミナル:Gemfile
gem ‘mini_magick’, ‘3.8.0’
“`現在のMiniMagickのバージョンは、3.8だったので
アラートにて提示されているように4.9.4以降をインストールするように修正する。“`ターミナル:Gemfile
gem ‘mini_magick’, ‘>= 4.9.4’
“`
【webpacker】Rails6.0でのBootstrap, jQueryの導入方法まとめ
RailsへのBootstrapとjQuery導入方法は、
– 今までもあったGemを使った方法
– 6.0からのWebpackerを使った方法と2つあるが、今回は*後者*の方を採用する。
#参考対象者
– Rails6.0で、bootstrapやjQueryを使いたいなと思っている方#環境
“`
$ rails -v
Rails 6.0.3.1
“`
“`
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin19]
“`#Webpakerでパッケージを管理
“`
$ yarn install jquery popper.js bootstrap
“`Railsでは、BootstrapはjQueryとpopper.jsというパッケージに依存しているため、一緒にインストールする。
また、パッケージ類は**node_modulesディレクトリ以下**にインストールされる。#bootstrapの導入
###Webpackの設定
“`config/webpa
今日のメモ(添字演算子、多重代入)
#添字演算子
添字には負の数値(-の値)を指定できる。
要素(a=[n1,n2,n3,n4])の末尾を-1とし、先頭に向かって順に減っていく。
更に添字に2つの整数を指定すると複数の要素を出力できます。“`
a = [0,1,2,3,4,5]
a[1,3]
#=> [1,2,3]
“`#多重代入
コード内の複数の変数に一度に代入をする。
メソッドの返り値で複数の値を返し、多重代入で受け取る事もできるがreturnを指定する必要がある。“`
def foo
return 1,2,3
end
a,b,c = foo
p a
p b
p c
#=> 1
2
3
“`変数よりも代入する値が少ない場合は、余った
Active Storage 導入環境下での単体テスト
まずActive Storageって何?
ファイルアップロードを行うための機能で、
これを使えばフォームで画像の投稿機能などが簡単に作れる。
また、クラウドストレージサービスへのファイルのアップロードも
簡単にできちゃいます。自分の場合は画像をアップロードできる機能があるアプリケーションを作成していたので、
Active Storageを導入していました。
特徴としては画像用のカラムを用意する必要がないこと。
今回はこの特徴で、エラーがでまくっていたのですが…##本題のテストのこと
今回のエラーの原因は
“①FactoryBotで、ダミーのimageデータを作ってしまっていた“
“②spec.rbで、fixture_file_uploadメソッドを使っていなかった“以上の2つが主な原因でエラーを吐きまくっていました。
特に②に関しては、見当違いのことを調べていたばかりに中々たどり着きませんでした..
—
それでは①から。
例えばproductというモデル/テーブルがあるとして
`Active Storageを使っていない場合`
imageカラム(
TodoじゃなくてNoTodoアプリをリリースした。。(とridgepoleの注意点)
## 前書き
https://notodoo.herokuapp.com/
今回、NoTodoというwebアプリを作りました。Todoリストを作って「やることが多すぎる!」と感じたことはありませんか?
しかし逆にやらなくてもいいことも多くないですか
無駄なことを減らせば本当にやらなければいけないことに時間をさくことができます。
このwebアプリはそんな「しないことリスト」(NoTodo)をつくるためのものです。ツイッターでリストを公開することも出来ます。[NoTodo>](https://notodoo.herokuapp.com/)
##使った技術
rails6
heroku hobbyプラン(freeだとスリープするのがつらい)
ドメインは取得してません。使ったgem(一部省略してあります)
“`
gem ‘rspec-rails’
gem ‘factory_bot_rails’
gem ‘ridgepole’
gem ‘devise’
gem ‘omniauth-facebook’
gem ‘omniauth-google-oauth2’
gem ‘doten
Googleアナリティクスを活用し、サイト分析を行う-1章
### 背景
現在デプロイしているサイトが自分以外のユーザに見ていただいているのか、経緯やアクセス数を調査したく、グーグルアナリティクスを導入することにしました(ちょっと噛みそうになります…笑)
今まで、gitのトラフィックなどから、自分のポートフォリオサイトのアクセスを確認していたのですが、アナリティクスを使用していろいろと傾向を調査していきたいと考えています。※この記事は、アナリティクスを設定してから、約1時間ほど経過しました。まだ分析結果が表示されないのですが、もう少し、待ってから状況を報告したいと思います(長ければ24時間かかるとのことです。)
表示結果や、手順の修正情報等々はおって掲載します。### 環境
| 項目 | 内容 |
|:—————–|:——————:|
| OS.Amazon Linux AMI |
DockerでRailsチュートリアルのローカル開発環境構築(Rails 6 + PostgreSQL + Webpack)
# はじめに
最新(2020.8.5現在)のRailsチュートリアルではRails 6が使用されており、
これに対応した開発環境構築をDockerでやってみたいと思います。個人開発アプリの開発環境構築の際に、
私は新しいものが好きだから…とRails 6を導入しました。ところが…このRails 6からJavaScriptのモジュールバンドラーにWebpackが導入されたことにより、
BootstrapやFontawesomeといったツールの導入、管理方法が変わるだけでなく、
そもそも環境構築の際もRails 5では必要ない手順が必要だったりと、
Rails 6とWebpackの壁に盛大にぶつかることとなりました…せっかくなので、今回の試みを経て、知識、経験の整理定着を図りたいと思います。
また、実際にRailsチュートリアルを脱線しながら再走し、学びを深められたらと思っています。
個人開発アプリ
[mdClip <オンラインmarkdownエディタ>](https://mdclip.xyz/)以前Rails 5の環境構築をDockerでやってみた記
Rails herokuにデプロイ後にAPIキーが見当たらなかった時の解決方法
#実装した機能
`gem geocoder` を使って入力した住所から緯度、経度を取得。
Google API Keyを取得してアプリ上に地図表示。#発生した問題
開発環境では問題なく動作していたがデプロイ後に本番環境で
動作チェックすると入力した住所に対して地図が表示されず何も返してくれなかった。#推測してみた
コンソールをチェックすると`No Apikeys`、`Invalidkey`と出ていたので、APIキーが原因であると推測。
APIの知識が不足していたので開発環境で書いているコードの問題かGoogle APIの設定の方に問題があるのか?
と考えて深掘りしていくが解決出来そうな記事は見当たらず。ちなみにAPIキーは`gem “dotenv-rails”`を使い、`.env`の中の環境変数に入れて`.gitignore`の中に隠してました。
Chromeの拡張機能であるGoogle Maps Platform API Checkerを入れてみると、
エラーの文字と、APIキーを入れたコードの一文が表示されているのを確認できたがAPIキー自体が見当たらない
Puma – Nignx って環境で rails s -e production -d でうまくいかない時の逃げ道
# 前提
EC2 に Rails6 + Puma + Nginxでデプロイしてて
かつ EC2にSSH接続したターミナルで“`
rails s -e production
“`
では問題なくサービスが表示されているのに“`
rails s -e production -d
“`
ではエラー画面が表示されるだと?#### ええ〜これじゃサービス起動させ続けるのにSSH接続しっぱなしじゃーん
という悩みを抱えたキミ向けだよ!# 解決
Railsのルートフォルダにあるconfig/puma.rbに“` config/puma.rb
daemonize
“`
って追記するんだ!
これで“`
rails s -e production -d
“`
では起動できないままだけど“`
rails s -e production
“`
これでデーモン化されるので解決だよ!これじゃローカルでもデーモン化されて不便だろって人は
“` config/puma.rb
if Rails.env == ‘production’
daemonize
en
【orderメソッド】Railsで、データの並び順を設定する
#参考対象者
– Railsで、アプリ作ってるけど、あるデータの並び替えをしたいなと思っている方#特定の状況下で、データを並び替えたいとき
###基本形
“`
Model.order(Column: :DESC)
Model.order(“Column DESC”)
“`デフォルトでは、ASC(昇順)になっているので、DESC(降順)にすることができる
###実際に、並び替えしたデータ群を取得してみる
“`feed_controller.rb
#データベース上の全てのデータを取得
feeds = Feed.order(id: :DESC)#現在ログイン中ユーザーの全てのデータを取得
feeds = current_user.feeds.order(id: :DESC)
“`今回は、Feedモデルというデータを取得してみた。
上は、データベース上の全てのデータを取得し、
下は、現在ログイン中ユーザーの全てのデータを取得している。こうすることで、降順になったデータ群を取得することができる。
#デフォルト設定を変更して、並び替えしたいとき
###モデ
syntax error [each do end のエラー]
”syntax error”と言い、
Rubyの繰り返し処理の
とあるものが抜けていると
エラーがでます!“each do”にたいしての
“end”がないのでエラーがおきました。”end”をつけると
ちゃんと機能します!
[ruby]ドリルアウトプット
## 内容
クラスとインスタンスの概念を用いたコードの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675525/9c2fd838-c198-3c81-2707-f8f867992ad8.png)
上記のコードに追加を行い、以下の出力結果を得られるようにしてください。ただし、クラスとインスタンスを使用するものとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675525/cb8be859-49a6-5fd1-4b64-47c66a65c31d.png)## 実装
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675525/09ffd083-71b4-b974-2cd4-40d1ec1d63a5.png)
まず、3行目〜7行目のinitializeメソッドで宣言されたインス
Railsのルーティングついて
# 概要
Railsアプリケーションでのルーティングについてまとめました。# 今回のゴール
『ルーティングの効果』と『実践的な使い方』を確認することです。# <1>ルーティングの効果
**結論**
・HTTPリクエストをもとに、コントローラーとアクションに処理を渡せるようになる。
・ヘルパーメソッドにより、コントローラーやビューでパスとURIを作成できるようになる。## コントローラーとアクションの指定方法
ルーティングではクライアントからのHTTPリクエストを下記のコードで振り分けます。“`:ルーティングのイメージ
[HTTPメソッド] ‘[URIのパス]’, to: ‘[コントローラー名]#[アクション名]’例) get ‘samples’, to: ‘samples#index’
“`つまり、今回の例ですと…
クライアントから**『GETメソッド』**で**『samplesのパス』**でアクセスがきたら
Railsアプリケーションの**『samplesコントローラー』**の**『indexアクション』**で処理をしますという意味になり
activerecord-importでUpdateする方法
微妙に書いてなかったので自分用にメモ
“`Ruby
update_users = []
users.each do |user|
user.name = “John”
user.email = “test@mail.com”
update_users << user end # ここのon_duplicate_key_updateに更新したい列名を渡す User.import update_users, on_duplicate_key_update: [:name, :email] ``` GemのデフォルトはINSERTをする用途で`on_duplicate_key_update`オプションで列名を指定してあげることでキーが被ったときに指定した列が更新される(Upsertされる)という理解をした。 なので元々あるユーザーだけを更新して渡せばUpdateだけされるという感じ。 ちなみにDBによってこのオプションの指定の仕方は違うらしい https://github.com/zdennis/activerecord-import/#duplicate-key-u