kikeda1104's blog

備忘録・技術に関することを書いています。(webエンジニア)

文字列の連結(`#+`, `#{}`)のベンチマーク

質問されてどうなのか知らなかったので、ベンチマークを取ってみた。 - ruby 2.2.10 - macOS - 3.3 GHz Intel Core i7 コード(sample利用) require 'benchmark' Benchmark.bm 10 do |r| r.report "#r+" do result = '' 1000000.times do chr = [*'a'..'z'].s…

shellコマンドのエスケープ[Ruby]

外部コマンドで、ファイルパスを渡す際にエスケープが必要になり探していたら見つけた。 前提 ruby 2.2.10 rails 4.2.x.x コマンドまたは引数の文字列をエスケープ require 'shellwords' file_name = 'tmp/file_name1(1).txt' system "ls -lShellwords.es…

Redshiftへのデータ流し込み(Batch)

Batchを作ることになったので、そちらを書いていきます。warningを解消する際にすでに公開していたバッチですが、コードを改善したのでまた載せていきます。 サンプルコードは参考までにしてください。 前提 Rails(4.2.x) Ruby(2.2.10) RedShift S3 検討・方…

Rubyからシェルコマンドを実行する(Kernel.#system ..etc)

調べていたので、書いていきます。 前提 Ruby 2.2.10 外部コマンドの呼び出し 実装で利用したは、#system, #`を利用していて、コマンドを実行して返却値、ステータスは無視するケースと返却値を利用するケースで分けて使っています。 Kernel.#system 引数を…

AWSのメモリ使用量のモニタリング

AWS

EC2のメモリ使用量を継続的に監視するために、cloudwatchに転送するAWS公式で出しているスクリプトを利用した。new_rericが入ったんだけれども、みれる状況じゃなかった。(諸事情) 前提 AWS EC2 CloudWatch Cloud SNS 方針 EC2のメモリ・スワップ使用量は、E…

mysql([Warning] Using a password on the command line interface can be insecure.)

コマンドファイルを作っている際に出てきたので、警告を表示しないようにする。 前提 mysql: 5.7.18 ruby 2.2.10 Rails(secret.ymlに依存していて、環境変数で書かれていない) 解決方法 confファイルを利用して、client情報を渡すことにする。 confファイル…

sidekiq + redisの構築(Rails 4系) 4-1

AWS

インフラの準備を分割して書いていきます。 前提環境: ElasticCache(Redis 4) AWS EC2(Amazon linux) AWS(Amazon Linux) 東京リュージョン 検証環境として、立てていきます。(EC2はのぞく) EC2 EC2は立てている前提で、サーバにsshで接続して、redis(client)…

Redshiftへのデータの流し込みについて

AWS

環境の違いでスクリプトを変えたので、そちらを載せます kikeda1104.hatenablog.com kikeda1104.hatenablog.com SQLファイル -> sh # tab区切りでファイル出力: dump.shとする PASSWORD=password mysql -u username -p"$PASSWORD" -h hostname db -e "select…

Redshiftの環境構築

AWS

Redshiftの環境構築について書いていきます。 前提 RedShift データサイズが増加量を計測して毎月1GB増える 将来的にデータサイズが、クラスターのストレージを超える可能性も検討してサイズ変更ができるように設計 Snapshotを利用したデータサイズの変更に…

Basic認証(S3 + CloudFront + Lamdba)

AWS

コーポレートサイトを作っていて検証として公開したいが、閲覧の制限をかけたかったので急ぎめでBasic認証をかけました。 前提 httpsでの公開まで終えている Lamdba CloudFrontと連携させてBasic認証を行う 環境構築 Lamdbaで、リュージョンをバージニア北部…

Redshiftのソートキー

AWS

前回の記事の続きでRedShiftのチューニング(ソートキー)を定義します。今回は結論はなしで、ベンチマークを残します。 前提 RedShift PostgreSql ソートキー RedShiftでは、ソートキーを元に並び替えてデータをディスクに格納します。 最新のデータが最も頻…

クエリ実行時間の表示(PostgreSQL, RedShift)

PostgreSQLクライアントから操作する際に、クエリの実行時間が、表示されていない。計測で必要だったので設定を調べた。 前提 Mac OS PostgreSQL(Client) RedShift コマンド \timing db=# \timing Timing is on. # COPYコマンド INFO: Load into table 'tabl…

RedShiftのエンコード

AWS

前回の記事では、テーブル定義まで進めて検証しましたが、今回はエンコードについて書いていきます。 前提 RedShift エンコード メリットは下記の通りです。 圧縮は、データの格納時にそのサイズを小さくする列レベルの操作です。圧縮によってストレージスペ…

Unicornの参照先が変わらないケース(Capistrano)

前提条件 AWS EC2 Amazon linux Unicorn + Nginx + Rails(4.2) + Capistrano 問題 デプロイした後にWeb + Appサーバにアクセスすると、release versionが古いバージョンにアクセスしている(しかもviewsのみ)そのrelease versionは削除されているので、templa…

sshの接続切れ対応(Broken pipe)

以前から利用しているサーバに対してクライアントには設定(.ssh/config)していたが、サーバに始めて接続する際に、オプションを設定していなかった。 サーバ接続中に起きたので、再設定して、sshした。 接続状態を維持したいので、ServerAliveIntervalとServ…

sidekiq + redisの構築(Rails 4系) 3

今回は、workerのテストを書いていきます。 前提環境 Rails 4.2.x Ruby 2.2.10 Redis Rspec CI(circle ci) Redis Worker Classの場合 方針を決めます。retryの上限数を超えた場合のテストも書きたいので、(Dead Job Queueに移す前に通る # app/workers/high_…

テーブル定義/データインポート(Amazon Redshift)

前回mysqlからtsvファイルとしてダウンロードしたファイルをredshiftにデータをロードする。検証目的なので、batch処理は後日。 前提環境 Redshift(AWS) MySql(5.7系) macOS 10.13.5 PostgreSQL 9.6.2 前回の記事でtxtファイルをs3アップロードしている Reds…

tsvファイル出力(MySQL)とaws s3アップロード

RedShiftへのデータロードで、テーブルからcsvでダウンロードしてs3にアップロードします。txtファイルの出力とs3のアップロードについて書いていきます。 txtファイル SQLファイルを作る # dump.sql select * from c into outfile '/tmp/table_name.txt' FI…

sidekiq + redisの構築(Rails 4系) 2

前回の続きで、sidekiqのデプロイについて書いていきます。 前提環境 rails 4.x ruby 2.2.10 capistrano 3.5 capistranoを利用していたので、capistrano/sidekiqをGemに追加します。 unicorn, pumaなどの設定は無視していきます。 実装 # Gemfile group :dev…

sidekiq + redisの構築(Rails 4系)

非同期処理を取り入れる提案をして、採用されたので構築していました。アウトプットとして何回かに分けて記事を書いていきます。 前提環境 Mac OS sidekiq(non pro, non enterprice) redis rails 4.2.x ruby 2.2.x 前提環境の背景を話すと、Rails 5系にアッ…

PostgreSQLサーバの起動コマンド

毎回ググっているので、自分の備忘録として残しています。 環境 macOS Sierra PostgreSQL 9.6.2(homebrewでインストール) ## PostgreSQLサーバの起動(homebrewでインストール) postgres -D /usr/local/var/postgres 参考 18.3. データベースサーバの起動

drop_tableの代わりにActiveRecordMigration#revert

環境 Rails 5.0.x Ruby 2.3.x 前提 初期からRailsでアプリを作成していて、tableを作成したmigrationもそのアプリが保有していることが前提になります。 modelを途中で消す場合、./bin/rails d model model_nameで消すと作成した際、migration fileも削除さ…

Capybara aタグ(target="_blank")をクリックについて

掲題の件、featureテストを書く量が日に日に増えてきており、何を書くかと書き足りないケースなどを自覚できるになり知見も日々、蓄積できていて楽しく、 クライアントと紹介してくれた友人に感謝っすね。 aタグのtarget属性(_blank) 新規ウィンドウ、タブを…

Rails 5.0からRails 5.1へのアップデート(1/?)

こんにちは。時間の合間に作成しているサービスのRailsを5.0から5.1へアップデートしていまして その内容を書いています。rails upgrade guideが、まだ作成中で、issueを読んで対応していました。 テスト, jsの移行は、まだ終わっていなくて順次移行中です。…

circle.ymlの設定(bunlderのみ)

github上で、ソースを管理しており、プロジェクトでCIを利用しているが、Circle CIのbunlderのversionが localと一致しない(lockfile)ことで、warningのメッセージが上がっていたので、circle.ymlを作成しました。 circle.yml rootディレクトリに、circle.ym…

FormObject実装(2回目)

前回からの引き続き。viewとcontrollerの実装を進めていきます。 前回まで FormObject実装(1回目) - kikeda1104's blog controllerの実装 # controller/sample_forms_controller.rb class SampleFormsController < ApplicationController def new @offer_for…

FormObject実装(1回目)

form_objectの実装を進める際に、gem virtusを使って実装を進めたので、何度かに分けて書いていきます。 環境 Cent 7.x rails 5.0.0.1 ruby 2.3.3 gemの導入 Gemfileに追加します。 # Gemfile ... gem 'virtus' ... $ bundle install app/forms app/formsの…

postgre sql サーバの起動方法(Cent7.x)

自宅のrailsアプリでは、posgreを使っていてサービス起動/停止する際にコマンドを忘れないためのメモです。 環境 Cent OS 7.x PostgreSQL 9.2.15 起動方法 インストール方法により、サービス名も変わります。 # systemctl start postgresql

株式会社リューノスを退職しました。

SNSに投稿するには長文になっていたので、 重複しますが報告と退職の理由について書いていきます。 正確には記事の投稿している日は、まだ在籍中で、1月10日で退職します。 報告 最終日なのに15時位まで、コードを書き、マージまでして、17時過ぎても質問さ…

ActiveRecord::Base.establishによる複数回切り替え時の不具合

掲題の件、テスト書いていることで発見できまして、APIリファレンスを読むと割と合点はいきましたが 間違えなどあれば、指摘いただきたいです。 環境 - rails 5.0.0.1(puma) - ruby 2.3.1 ActiveRecord::Base.establishを何度も読み出すことで、queryを発行…