- 1. MySQLの導入方法
- 2. 2020年にruby-net-nntpとtmailを動かしてみる
- 3. nil全般について
- 4. 【PAY.JP】#1 クレジットカード登録機能 実装の軌跡
- 5. DragonRuby GTK (Game Toolkit) で遊んでみた
- 6. 【Rails】acts-as-taggable-onでマイグレーションエラーが起きたときの解決方法
- 7. 英語のニュースAPI及びWikipediaのgemを使用して記事を取得する方法
- 8. ヘイヘイバリデーションってモデルとマイグレーションファイルどっちに書けば良いんだyo
- 9. 【Rails】acts-as-taggable-onを用いたタグ機能と、tag-itを用いたタグ入力補完機能の実装
- 10. 100日後に一人前になるエンジニア26日目
- 11. Rails gem ‘geocoder’を使って入力した住所をGoogleMapに表示させる
- 12. MySQL5.7のインストール
- 13. rbenv versionsとruby -vのバージョンが合わない
- 14. Railsビギナーやってみた【第2章】
- 15. [簡単]Rubyとbundlerのバージョンアップ法
- 16. Rubyを用いておみくじを作成
- 17. 【環境変数】 rails 環境変数とは
- 18. FactoryBotの不要コード(不使用コード) を検出して削除する
- 19. Sessionはブラウザを閉じると消去されるように設計されたCookieであり、それをやり取りするメソッドだった: Railsチュートリアル備忘録 – RailsのSessionとは?
- 20. dockerでERROR: An HTTP request took too long to complete. と表示されるエラー
MySQLの導入方法
#ローカルでのMySQLインストール
Homebrewがインストールされているかを確認
“`
brew –version
“`Homebrewのインストールが完了している状態で、次にMySQLをインストール。バージョン指定したいときは指定してあげる。
“`
brew install mysql
“`インストールされたMySQLの情報は下記のコマンドで確認
“`
brew info mysql
“`Railsにてアプリケーションを新規で作成する際、デフォルトではSQLiteが設定されるため、新規アプリ作成時のコマンドにて下記の通り明示的にMySQLを利用することを宣言。
“`
rails new アプリケーション名 -d mysql
“`MySQLを「起動」する際には下記のコマンド
“`
mysql.server start
“`実際にMySQLを利用するにはログインする必要があるため、一旦デフォルトで用意されている「root」ユーザーでログイン。
下記のコマンドで「root」ユーザーでのログインが可能。“`
mysql -ur
2020年にruby-net-nntpとtmailを動かしてみる
# はじめに
必要に迫られてNNTPで通信をする必要に迫られました。
昔に作成した自前のNNTPクラスでも良かったのですが、Gemfileが使えるruby-net-nntpを利用してみました。
このライブラリは記事をTMail::Mailクラスに格納するので、自動的にtmail-1.2.7.1もダウンロードされます。# 環境 & 準備作業
* ubuntu 18.04 LTS
* ruby 2.5.1 (Ubuntu付属のパッケージ)## ライブラリのダウンロード
次のファイルを準備しました。
“`Gemfile
source ‘https://rubygems.org’
gem “ruby-net-nntp”
“`“`bash:bundlerを利用してライブラリをダウンロードする
$ bundle install –path lib
$ ls lib/ruby/2.5.0/gems/
log4r-1.1.10/ ruby-net-nntp-1.0.0/ tmail-1.2.7.1/
“`# サンプルプログラムの作成
コードを動かそうとしたところ
nil全般について
#blank?、present?、nil?、empty?とは
##nil?
変数の値がnilまたは、値なしの場合、真となります。##empty?
変数の値が””(文字列の場合)や値が空白の場合、真となります。
nil?との違いは、empty?は変数の値はあることはあるが、その値が空を示している、という点です。##blank?
nil?が真となる場合、または、empty?が真となる場合に、blank?は真となります。
簡単に言えば、blank?は値といえるものがない場合、真となります。##present?
present?は、blank?全く逆の動作をします。present?は、値といえるものがある場合、真となります。ちなみにnilに対してto_sメソッドを実行したものが”になる。
nil.to_s == ”
=>true
【PAY.JP】#1 クレジットカード登録機能 実装の軌跡
#### はじめに
チーム開発にて Ruby on Rails を用いてWebアプリを作成中です。まだまだ未熟なため、記述やコードがわかりにくいかもしれません。
記載しきれなかったものや変更点は、随時更新・ブラッシュアップしていきます。私と同じ初学者の方は検索に検索を重ねると`「いま自分が何を調べたいのか」`が分からなくなってしまいがちですので、専門用語やカタカナ用語は都度 解説します。
#### PAY.JPとは
*cf. https://paymentnavi.com/paymentnews/51558.html*顧客のクレジットカード情報をアプリ側のデーターベースには保存せず、PAY.JPに保存します。顧客とクレジットカードを紐づけて処理することにより、安全にクレジットカードの決済が行えるAPIとなります。
フリーマーケットアプリの開発で商品購入機能については、このPAY.JPを利用しクレジットカードで決済を行う実装としました。
>`API`:
Application Programming Interface(アプリケーション・プログラミング・インターフェイ
DragonRuby GTK (Game Toolkit) で遊んでみた
先日、Twitterで以下のチャリティー企画を知りました。
[最低5ドルの寄付でインディーゲーム1000タイトルを遊べるキャンペーンが開始 反人種差別運動の一環として – ねとらぼ](https://nlab.itmedia.co.jp/nl/articles/2006/10/news135.html)
PCゲームはあまりやらないけど、素材とかも入ってるし、寄付がてら買っておくか…と眺めていたら**DragonRuby GTK**の文字が。
Rubyでクロスプラットフォームなゲームが作れるやつのようです。
(一斉を風靡したRubyMotionも今はこのファミリーなのだとか)これは面白そう、ということで即ポチって週末に少し遊んでみました。
以下、macOS版を試した記録です。
※ とりあえずどんなものか試したい人にはブラウザ版があります。
http://fiddle.dragonruby.org/# Hello World
まずは動かしてみます。
“`sh
$ unzip dragonruby-gtk-macos.zip
$ cd dragonruby-mac
【Rails】acts-as-taggable-onでマイグレーションエラーが起きたときの解決方法
# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina# 事象
`$ rails db:migrate`やCapistranoでのデプロイ時に、
下記の様に`acts-as-taggable-on`のマイグレーションファイルでエラーが起きる。“`terminal:ターミナル
StandardError: An error has occurred, all later migrations canceled:Mysql2::Error: Cannot drop index ‘index_taggings_on_tag_id’: needed in a foreign key constraint: DROP INDEX `index_taggings_on_tag_id` ON `taggings`
20200525095250/db/migrate/20200516111153_add_missing_unique_indices.acts_as_t
英語のニュースAPI及びWikipediaのgemを使用して記事を取得する方法
現在、英語のニュース及びWikipediaの英語のページを、ユーザーが検索するキーワードに応じて収集して保存するアプリを製作しています。日本語での記事が少なかったので、この記事で説明してみようと思います。現在プログラミングを勉強中で、Qiitaに記事を投稿するのも初めてなので、間違いがありましたら、ご指摘いただければと思います。
## 使用したAPI
こちらの記事を参考に、各ページを訪問して使いやすそうなAPIを選定しました。日系の新聞のAPIも探しましたが、見つかりませんでした。ただし最後に紹介するNews APIでは国を指定することができ、日本語の記事を取得可能です。
https://en.wikipedia.org/wiki/List_of_news_media_APIs・The New York Times
https://developer.nytimes.com/・Financial Times
https://developer.ft.com/portal・The Guardian
https://open-platform.theguardian.com/
ヘイヘイバリデーションってモデルとマイグレーションファイルどっちに書けば良いんだyo
本日2記事目ですね。
もうビール飲みたいけどまだ飲まないんだから!!
(飲みながら記事書いて、誤字脱字多かったら絶望なため):frowning2:さーて今回はバリデーションを書く場所について。:cop:
張り切っていくわよ〜〜〜〜!!
#1 モデルへのバリデーション
“`ruby:user.rb
validates :email, presence: true
validates :first_name, presence: true
validates :last_name, presence: true, length: { maximum: 15 }
“`こんな感じで書くと思うんですよ。
説明すると【email】 空で値を保存できない
【first_name】 空で値を保存できない
【last_name】 空で値を保存できない、15文字以内じゃないと保存できない。って感じのバリデーションを書きます。
じゃあこれで問題なしだね!!って思うでshow。:santa:###これだとmysql(DB)に直
【Rails】acts-as-taggable-onを用いたタグ機能と、tag-itを用いたタグ入力補完機能の実装
# 目標
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/480eabec-7c97-a6c1-e6b6-7b226e67d90d.gif)
# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina# 前提
下記実装済み。
・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039)
・[Bootstrap3導入](https://qiita.com/matsubishi5/items/b117c95f4dd71340cc80)
・[ログイン機能実装](https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d)
・[投稿機能実装](https://qiita.com/matsubishi
100日後に一人前になるエンジニア26日目
#100日後に一人前になるエンジニア26日目
はいということで早いもので26日目です。
今日のテーマ
#dockerでredisに接続後sidekiqを用いて非同期処理を行うということでやっていきます。
##DockerFile
まずdockerfileにredisの記述を追加します。
redis:の部分でimageとport番号を指定しています。
あとはenvironmentでredis_urlを指定しました。“`dockerfile
version: ‘3’
services:
db:
image: postgres:11.2-alpine
volumes:
– ./tmp/db:/var/lib/postgresql/data
web:
build: .
command: /bin/sh
environment:
WEBPACKER_DEV_SERVER_HOST: “0.0.0.0”
RAILS_SERVE_STATIC_FILES: “1”
EDITOR: “vi
Rails gem ‘geocoder’を使って入力した住所をGoogleMapに表示させる
###「東京都千代田区」のような住所であれば緯度経度を取得してGoogleMapに表示されるが、「東京都千代田区丸の内2-4-1」のように番地まで指定すると、緯度経度を取得できずにマップが表示されなかったが解決できたので投稿。
##前準備
・googlemapを使用するためにまずはAPIを取得する。APIの取得はこちらを(https://qiita.com/nagaseToya/items/e49977efb686ed05eadb)・住所を保存するカラム、緯度経度を保存するカラムを作成。
latitude・longitudeが緯度経度。“`schema.rb
create_table “tours”, force: :cascade do |t|
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
t.string “address”, null: false
t.float “latitude”
t.float “longitude”
MySQL5.7のインストール
これがめちゃくちゃ参考になった。
https://weblabo.oscasierra.net/mysql-57-homebrew-install/“`
asatokensei@MacBook-Air memopy % brew install mysql@5.7
Updating Homebrew…
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
benthos broot clojure exploitdb freetds inxi jc mutt phpstan terragrunt wtf yq==> Downloading https://homebrew.bintray.com/bottles/mysql%405.7-5.7.29.catalina.bottle.tar.gz
rbenv versionsとruby -vのバージョンが合わない
# 問題
“`
asatokensei@MacBook-Air memopy % rbenv versions
system
2.6.6
2.7.0
* 2.7.1 (set by /Users/asatokensei/.rbenv/version)asatokensei@MacBook-Air memopy % ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]
“`rbenv versions では2.7.1
ruby -v では2.6.3
になっている。共同開発で2.7.1を使いたい。
# 解決策
これは環境変数(PATH)がミスっているらしい。
ruby がどのパスから呼ばれているか見てみる。
“`
asatokensei@MacBook-Air memopy % which ruby
/usr/bin/ruby
“`このパスはrbenv で入れた ruby ではなく、MacOSにデフォルトで入
Railsビギナーやってみた【第2章】
###第2章 ユーザー登録・ログイン機能作成
***#####devise(gem)を使う準備
Gemfileに`gem ‘devise’`を追加し、ターミナルで`bundle install`実行
`rails g devise:install`を実行した後、`rails g devise user`でuserモデルを作成
これでルーティングも自動で作成される。#####ログアウトリンクの設置
部分テンプレートの表示:appビューののbody内部に`<%= render 'layouts/header' %>`を追加
部分テンプレートの作成:ビューのlayoutsフォルダに_header.html.erbファイルを作成#####ログイン、ログアウトで表示するリンクを変える
<% if user_signed_in? %>を使う←user_signed_in?はdeviseが用意してくれているメソッドなので定義しなくてもよい***
####メール認証機能をつける本人のメールアドレスのみ登録を受け付ける
#####deviseを使った認証機能
・userモデルのファイ
[簡単]Rubyとbundlerのバージョンアップ法
# 背景
rubyとbundlerのバージョンが古くて、デプロイ時にエラーが出まくってかなり苦労したんで、備忘録として書き残そうと思います。。## Rubyのバージョンアップ
0.今回はRubyの2.6.3が無いこととする。1.最新版をインストールする。
“`
$ brew upgrade ruby-build
“`2.インストール可能なバージョンリストを表示して確認する。
“`
Available versions:
1.8.5-p52
1.8.5-p113
1.8.5-p114
1.8.5-p115
1.8.5-p231
—中略—
2.5.4
2.5.5
2.6.0-dev
2.6.0-preview1
2.6.0-preview2
2.6.0-preview3
2.6.0-rc1
2.6.0-rc2
2.6.0
2.6.1
2.6.3
“`3.rbenvをインストールする。
“`
$ rbenv install 2.6.3
“`4.インストールしたバージョンを使用する
Rubyを用いておみくじを作成
#はじめに
簡単なおみくじをRubyを用いて作成していきたいと思います。
配列の要素をランダムで出力するだけの簡単なプログラムです。#実際のコード
“`ruby
#まず、配列の中におみくじの種類を記載します
omikuji = [“大吉”,”中吉”,”吉”,”凶”,”大凶”]#omikuji配列の要素数をnum変数に代入します。
num = omikuji.length#randメソッドでランダム引っ張り出したnum変数の値をresult変数に代入します
result = rand(num)#omikuji変数の中身からランダムに選ばれた配列の要素が、実行する度に出力されます。
puts “#{omikuji[result]}”“`
以上です。
おみくじを買い忘れた際は、ぜひご活用ください
【環境変数】 rails 環境変数とは
##【ゴール】
環境変数を使用して、アプリケーショへの情報を埋め込む##【メリット】
■ 漏れたくない情報をアプリケーション内で使用できる
■ セキュリティ向上
■ 各種APIに使用できる##【開発環境】
■ Mac OS catalina
■ Ruby on Rails (5.2.4.2)
■ Virtual Box:6.1
■ Vagrant: 2.2.7##【実装】
## gem ‘dotenv-rails’をインストール
“`アプリケーション.Gemfile
gem ‘dotenv-rails’
“`“`mac.terminal
bundle install
“`##app直下に「.env」を作成する
※こんな感じになるように。(真ん中あたりにあります。)
![スクリーンショット 2020-06-15 12.06.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620689/d48777b2-8134-063e-ff43-f96058a3dcb3.png)
FactoryBotの不要コード(不使用コード) を検出して削除する
# 概要
[FactoryBot](https://github.com/thoughtbot/factory_bot) はRailsアプリケーションをテストするためのファクトリを簡易的に作成できる便利なツールです。
しかし、テストコードの増加に伴い、FactoryBotのコードも`trait` や `transient`を使ったより複雑なものが生まれてしまい、いざ整理しようにもどのコードが使われているのか判断するのが難しくなってしまいます。
そこで、[FactoryTrace](https://github.com/djezzzl/factory_trace) を用いて、使用されていないFactoryBotのコードを特定し、それを削除することでファクトリコードのお掃除をします。
# インストール
Gemfileに追加してインストール
“`ruby
gem ‘factory_trace’
“`“`ruby
$ bundle install
“`# rspecを実行
使われていないFactoryBotのコードに関する情報を標準出力する場合、以下のように `F
Sessionはブラウザを閉じると消去されるように設計されたCookieであり、それをやり取りするメソッドだった: Railsチュートリアル備忘録 – RailsのSessionとは?
# Sessionはブラウザを閉じると消去されるように設計されたCookieであり、それをやり取りするメソッドだった: Railsチュートリアル備忘録 – RailsのSessionとは?
## Abstract: RailsのSessionとは
Progateのころから気づけば隣にいた`session`
Railsチュートリアルを進めていくと
セッションとかいう変数みたいなものと
それを補足するCookieを利用したログイン維持の仕組み
というモヤモヤした感じを抱いていたが実際はどちらも
– HTMLをステートフルにするための仕組み
– デフォルトではどちらもCookieに保存されるただし
– sessionはRailsが実装してくれていたのに対して, Cookieによるログイン維持は後から実装した
– sessionは期限あり(デフォルト?)に対して, 後者は永続的(意図的に設計した)期限付きCookieを利用した
セッションというHTMLをステートフル化するための仕組みを
**開発者が意図することなく**実装してくれていたのがRailにおけるsession
dockerでERROR: An HTTP request took too long to complete. と表示されるエラー
# 問題
ERROR: An HTTP request took too long to complete. と表示される。
“`
ERROR: An HTTP request took too long to complete. Retry with –verbose to obtain debug information.
If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60).
“`# 原因?
EC2のメモリ容量不足?
# 解決法
停止コンテナ一括削除
“`
$ docker container prune
“`
全コンテナ一括削除“`
$ docker rm -f `docker ps -a -q`
“`
再起動“`
$ docker-compose up
“`解決!
# 参考
https