Ruby関連のことを調べてみた2020年04月26日

Ruby関連のことを調べてみた2020年04月26日

【Rails tutorial】 Herokuへのデプロイ&二回目以降のデプロイ方法

現在レイルズチュートリアルを進めているのでその経過をアウトプットしていきます。

今回はタイトル通りHerokuのデプロイ方法と二回目のデプロイ方法についてです。

チュートリアル通りに進めていましたが、git push heroku の部分でつまずきました。

結論から言うとconfigのdatabase.ymlの記述に問題がありました。

下の方にあるproduction: の部分を以下のように書き直します。

production:
<<: *default adapter: postgresql encoding: unicode pool: 5 簡単に言うとpostgreSQLを使うという宣言をする記述のようですね。 もしチュートリアル通りにやってうまくいかないという方はここを治すとデプロイできるかもしれないです。 そして二回目以降のデプロイ方法ですが演習の部分で元々のhello worldの表示をgoodbyeアクションの結果を表示できるようにしろという問題がありますが、指示通りにそのままgoodbyeアクションを記述してターミナルに git pu

元記事を表示

[rails] migrate:reset でのエラー

#はじめに
railsでアプリを作成していた際、db:migrateをした際に、エラーが発生しめmigrate:resetをしたのですがその際初めてのエラーが発生したので、その備忘録として書きたいと思います。

## 最初のエラー
新しくテーブルを作成するためにマイグレーションファイルを編集して実行したところファイル内に記述していたテーブル名に記述ミスがあり、エラーが発生しました。

““
class CreateHoges < ActiveRecord::Migration[5.2] def change create_table :hoges do |t| t.references :huge t.text :text t.timestamps end add_foreign_key :hoges, :missname, column: :huge_id # missnameが記述ミス end end ```` そのため、記述を直し改めてマイグレーションファイルを実行したところ以下のエラーが発生しました。

元記事を表示

【Rails】wheneverを用いたバッチ処理の実装

#目標

登録ユーザー全員に、Googleメールを1日毎に送信する。

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

・メール送信機能を実装済み。

メール送信機能 ➡︎ https://qiita.com/matsubishi5/items/c88e8c58b1ce39302868

#メール送信機能を編集

###1.`「login_mailer.rb」`を編集

“`ruby:daily_mailer.rb
class DailyMailer < ApplicationMailer def send_mail(user) @user = user mail to: @user.email, subject: "定期配信" end def self.send_when_everyday @users = User.all @users.each do

元記事を表示

Rubyの『テスト自動化』(Minitest)について、簡単にまとめてみた。

#はじめに
これは、[プロを目指す人のためのRuby入門(チェリー本)](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774193976)を読んで理解を自分なりにまとめて書き記した物です。
個人的にわからない箇所を書き記したものと

元記事を表示

Ruby on Railsでサーバー起動に苦労した話

#起こった現象
Ruby on Railsで“`rails new hoge“`としてファイルを作ったが、“`run git init from “.”“`のところで止まってしまった。
当然、“`rails s“`としてもサーバーは起動せず、“`webpacker:install“`しろというようなエラーがでた。

現象としては下記のブログと同じ。

ただ、このブログ記事にある通り-Gをしても治らなかった。

#対処法
色々調べたら下記Qiita記事を見つけた。
https://qiita.com/libertyu/items/1eb74adc817ab8971100
この記事の通り、“`rails webpacker:install“`をしたら、下記のようなエラーが出た。

> ‘node’ は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ‘nodejs’ は、内部コマンドまたは外部コマンド、

元記事を表示

windows10(WSL2)でRailsの環境構築をしてみた~Rails導入/起動まで~(2)

#はじめに
[前回記事](https://qiita.com/yoshige/items/7a17bb7a3582d72a7e48)にてWSL2の導入ができましたが、今回はWSL2を用いて実際にUbuntu 18.04に環境を構築していきます。

#Ruby(Rails)導入
@ksh-fthr さんの以下記事を参考にしました。
[Windows10 で WSL を使って Rails 環境を構築したときのメモ](https://qiita.com/ksh-fthr/items/64a4e86c8bad08322c94)
見出し`Rails 環境を構築しよう`の`1~8`を実施してください。

今回しようとしているのは上記の記事と若干違うので、以下の点だけ異なっています。
・`Ruby 2.6.6`を導入
・sqlite3ではなくmysqlを導入するので`7.sqliteを入れよう`は実施不要

#WebPackerの導入
`rails6`から`Webpacker`が必須となり、Webpackerを入れないと、Railsアプリ作成の際にエラーが出てしまいます。
`Ubuntu 18.04

元記事を表示

windows10(WSL2)でRailsの環境構築をしてみた~WSL2導入まで~(1)

#はじめに
web開発に関してはmacユーザが多いと思うが、windowsでも WSL( Windows Subsystem for Linux) なるものでLinuxでのRails開発環境をある程度整えることができたので、備忘として残そうと思います。

| 環境
| —————————
| Windows 10 Home 64bit

また、今回導入したものは以下となります。

| 導入したもの
| —————————
| Ruby 2.6.6
|Rails 6.0.2.2
|mysql for linux 14.14
|Atom 1.45.0

#WSLを導入する
WSLの導入には@yoshigeさんの以下記事が非常に参考になりました。

まずは、以下の記事を参考にWSL1を導入し、初期設定まで済ませます。
Microsoft StoreでLinuxの

元記事を表示

AWS Service health dashboardのRSSを、Slackに一括登録する

# 背景

* Personal Health dashboardがありつつ、やはりService health dashboardの情報は、それはそれとして購読したい。
* SlackにRSSリーダーがあるけど、1 URLずつ `/feed subscribe https://…..rss` と実行する必要があり拷問である。複数をベタっと貼ってもエラーになる。どうにか一括登録したい。
* https://status.aws.amazon.com/rss/all.rss という全部入りがあるけど、使ってないリージョンのまで入ってるので、購読すると無駄にうるさい。また直近15記事しかなく、広域障害発生時は猛烈に流れて使い物にならないことが想定できる。製品ごとリージョンごとRSSで見るしかなさそう
* ググると手製の東京リージョンOPMLとか見つかるけど、数年前のものだったりする。常に最新のRSSであってほしい

# 解法

* https://status.aws.amazon.com/ からRSSのURLを、グローバルサービス、リージョナルサービスにバラして、ほしいリージョンだけ

元記事を表示

駆け出しエンジニアの自粛期間の学習内容

唐揚げと二郎が好きなエンジニア、ロンロンと申します。

コロナ騒動で大変ですよね
コロナの外出自粛要請に伴い
私事ですが15日付で所属のSES企業さんに休職扱いで自宅待機を命じられました。
・・・この状態抜け出したい(笑)
この度ツイッターアカウントを開設しました。
URL記載しておきますので
同じ駆け出しエンジニアの方は仲良くしてください。

さて本題ですが4月の半ばに緊急事態宣言が発令されて自宅待機になってしまいましたが
その際私がやったことを振り返っていきます。
【学習期間4/14夜~4/25夜】

【HTML・CSS】
・Progateにて初級・中級を学びました。
正直marginとpaddingの使い分けがプレビュー見ないとわからないレベルなのでもう一周かなあ・・・
・自己紹介ポートフォリオ作成
自分の名前・どの言語興味あるのか・これからどうしたいといった殺風景なものですが
サイトを作成しました。その際にGoogle先生に頼っていくつかタグの意味とか調べまくりました。やり切った感!!!

【Ruby・Rai

元記事を表示

Rails テーブルの制約について


Rails初心者の備忘録です。

#制約とは
Railsでテーブルのカラムやデータに制限を加え、想定通りの値が入るようにします。

例えば郵便番号のように数値のデータが欲しいとき、文字列が入ってしまうと機能がおかしくなってしまうこともあります。
そのため、制約を設定します。

#制約の種類
##データ型
一般的によく使われているのがデータ型で、以下のようなものがあります。

string 短い文字
text 長い文字
integer 数値(整数)
float 数値(浮動小数)
date 日付
datetime 日時
time 時刻
boolean 真偽

##NOT NULL制約
空欄を禁止する制約です。“`null: false“`を付けます。

“`.rb
class CreatePostImages < ActiveRecord::Migration[5.1] def change create_table :post_images do |t| t.text :shop_name t.text :image_id, null

Sinatraはどうやってリクエスト待受を開始しているのか?(コードを読んでみよう)

# まとめ

* [at_exit](https://docs.ruby-lang.org/ja/2.7.0/method/Kernel/m/at_exit.html)というメソッドを使って、[「スクリプトの内容が全部終わったあと待受を開始する」という設定をしている](https://github.com/sinatra/sinatra/blob/v2.0.8.1/lib/sinatra/base.rb#L1460)
* コードを読めばだいたいの事はわかるので、コードを読んでいきましょう

# サーバープログラムの動作の基本

細かい差は多々ありますが、言語・フレームワークに限らず一般的にサーバープログラムは起動すると

* リクエストを受け取ったらどうするかを決める
* リクエストの待受を開始する

という順で動作します。

# でもSinatraは

[Sinatra公式サイトのトップページ](http://sinatrarb.com/)にある、最初のサンプルプログラムの内容は

“`
require ‘sinatra’
get ‘/frank-says’ do
‘Put t

ダウンロードしたHTMLに対してスクレイピングしてCSV出力

ダウンロードしたHTMLファイルに対してスクレイピングをかけてCSV出力したいときにどうぞ

(例えば。。。ツイッターのフォロワー画面は無限スクロール機能があると思います。最深部までスクロールした状態のHTMLをchoromeの検証機能でダウンロードしたらCSV形式であなたのフォロワーリストが作れますよ)

ディレクトリ構造
scraping
┝ target_html
┃ ┗ target.html
┝ scraping.rb
┗ result.csv

対象HTMLの構造

“`target.html
(省略)

(省略)

 (省略)

 (省略)

(以下複数の別のtr)

“`

“`scraping.rb
require “nokogiri”
require “csv”

f = File.open(‘

Railsの開発環境でサブドメインをテストする

# 概要
Railsではデフォルトではlocalhost:3000で開発環境にアクセスできますが、
ルーティングをサブドメインで切り替えるテストをしたいなと思った時にハマったので、解決策を示します。

# ルーティング

“`rb:routes.rb
# hostがexample.comの時だけアクセスさせたい
constraints host: example.com do
get ‘top’, to: ‘top#index’
end
“`

# 新しいドメインを追加する
OSがmacまたはlinuxの場合は、/etcディレクトリに、windowsの場合はC:\Windows\System32\driversに存在するhostsファイルに新しいドメインを追加します。

“`linux:hosts
127.0.0.1 localhost example.com
“`

これで、127.0.0.1というIPアドレスにlocalhostとexample.comというホスト名を設定できました。

# Blacked Hostsの設定
Rails6を使用している場合は、アクセス可能

Ruby を使ってランダムサンプリングをする

# はじめに

言語学の研究などをしていて「コーパス分析をするぞ!」となった時,コーパスインターフェイスからデータを .csv などの形式でダウンロードすると大量のデータが出てきて途方に暮れる時があります.そしてそのようなデータを「EXCEL などで乱数を生成して…」とするのも大変なので,Ruby を使ってコードを書きました.誰かの役に立てれば嬉しいです.なお「自分を含めた文系の方にも分かりやすく」というモットーで書くので冗長な箇所が見当るかと思いますがご容赦ください.

# タスク

[BCCWJ](https://pj.ninjal.ac.jp/corpus_center/bccwj/)などで任意の言語表現を検索し,その結果をローカルに保存しようとすると場合によっては1万件くらいのデータがでてくる場合があるので困る[^1].このデータからできるだけ簡単に手頃なサイズのデータをランダムサンプリングしたい.

[^1]: ただ全てのコーパスインターフェイスがこのような仕様になっているわけではなく,[Sketch Engine](https://app.sketchengine.eu/)

Google Cloud Runでバッチ処理をやらせよう

# まとめ

* バッチ処理用のスクリプトとwebサーバー用のスクリプトを分けておくと開発が捗る
* 所定のJSONをSTDOUTかSTDERRに流すとError Reportingにエラーを通知できる

# ソースコード

https://github.com/skuroki/merger

Githubでforkしたリポジトリで、上流の変更をマージしています。こちらの詳細は別記事の[Github上のリポジトリの操作を自動化するdockerコンテナ](https://qiita.com/skuroki@github/items/cef4c3dc5fdc701eb3e5)にて。

“`webserver.rb
require ‘webrick’
require ‘json’
srv = WEBrick::HTTPServer.new({ :DocumentRoot => ‘./’,
:BindAddress => ‘0.0.0.0’,
:Port => EN

DockerでNginx+unicorn+rails+Mysqlの開発環境を作ってみた

#はじめに
今回はタイトル通りの開発環境を構築したので備忘録的にまとめる為に記事にしました。
既存のrailsプロジェクトにこの開発環境を導入する記事になります。新しいrailsプロジェクトの場合は少し手順が変わりますが同じように環境を構築できると思います。

###参考させていただいた記事等
[世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで](https://qiita.com/naoki_mochizuki/items/5a1757d222806cbe0cd1)
こちらの記事を参考にAWSにアプリをデプロイしていたのでunicoronの設定を同じものにしています。
nginxの設定ファイルはこちらを参考にさせていただきました。
[Nginx設定のまとめ](https://qiita.com/syou007/items/3e2d410bbe65a364b603#server%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)
[nginxについてまとめ(設定編)](https://qiita.com/morrr/items/7c9

AWSを用いてrailsアプリをデプロイするプロセスを頑張って噛み砕いてみるvol.5

## 近況報告
 **私の大好きなアーティスト,ポルノグラフィティのボーカル,岡野昭仁がyoutuberデビュー**して一ヶ月。最新の投稿ではLiSAのカバーしてて界隈では大盛り上がりでした。~~界隈 #とは~~

何がすごいって,カバーなのに岡野昭仁の曲と化すんですよ。圧倒的な経験実力声量があるからこそですよね。プログラミングも先人たちの知恵をコピーしたり応用したりフル活動して自分たちの作品を作り上げていくのだから負けては要られません!

### 今回の目標
・インフラ整備での各アクションの言語化
・コードを単に打っているだけでは理解しきれないし,他に応用できないので言語化して整理
・テックキャンプ受講生支援

## おおまかな流れ
・本番環境でrailsを起動させる。
・アセットファイルのコンパイル

##事前準備
[vol.1](https://qiita.com/aaabb6211/items/6194fa53f29061dc5444)
[vol.2](https://qiita.com/aaabb6211/items/2f8c5034b791767dee7a)
[vol.3]

[Ruby] if __FILE__ == $0 ってなんなの!?

## なぜこの記事を書いたのかしら?

ライブラリのソースコードを読んでいる時や、会社で他の人が書いたコードを読んでいるときに、次のような記述が書かれているのを見たことはないかしら。
“`if __FILE__ == $0“`(もしくは“`if $0 == __FILE__“`)

この記事では初学者向けの本には絶対書かれてはいないであろうこのフシギな記述の意味について解説するわ。

## 結論から言っちゃうと…

こんな気持ち悪い文体の記事を長々と読んでられないって子猫ちゃんたちのためにざっくり結論から言うわ。

**「このスクリプトが直接実行された時だけこの処理を実行しなさい。」**

はい、これで分かったわね?分かったお利口ちゃん達はここで読むのをやめてコードリーディングに励みなさい。
分からなかった子猫ちゃん達は…安心して、じっくり解説してあげるわ。

## 各変数の意味

全体を見ると全くワケの分からない記述だけどちゃんと一つ一つ分解して考えましょう。

要は“`__FILE__“`と“`$0“`が一致した時に実行されるわけね。

この“`__FIL

Ruby と Perl と Java で解く AtCoder ABC 113 C

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Beginner Contest 113 C – ID](https://atcoder.jp/contests/abc113/tasks/abc113_c)*
Difficulty: 877

今回のテーマ、リファレンス
# Ruby
以前に解きました、*[Ruby で解く AtCoder Judge System Update Test Contest 202004 B](https://qiita.com/superrino130/items/e01284f926f45be5427b)* を少し難しくした様な問題です。

“`ruby.rb
n, m = gets.split.map(&:to_i)
p = []

AWSへのrails:db seedでハマった件と対処法

#AWSへのrails:db seedでハマった件と対処法

##背景
AWS上のアプリに対してローカル環境からrails db:seedを実行したところ以下のエラーが発生し、
ハマったので記録しておきます。
*エラーは _task-appというroleがAWS上にありません_ というエラー

“`bash
MAC: XXX$ bundle exec rails db:seed RAILS_ENV=production
rails aborted!
ActiveRecord::NoDatabaseError: FATAL: role “task-app” does not exist
“`

## 目次
* [動作環境](#動作環境)
* [結論](#結論)
* [経緯](#経緯)
* [原因](#原因)
* [おわりに](#おわりに)

—————————————
## 動作環境
`OS : macOS Mojave 10.14.6`
`ruby : 2.6.3p62`
`rails : 5.2.4`

## 結論
AWS上で