Rails

nginx+pumaでRailsで動かす場合コネクションプールの数を増やさないと `ConnectionTimeoutError` が発生するよ

先に結論 pumaは worker * スレッド の数だけコネクションを使う しかし、ActiveRecordのコネクションプールの数はデフォルトで 5 なので大抵不足する コネクションが不足すると、DBへの接続リクエストは待ち状態に 待ち状態のまま一定時間が経過すると、Act…

Railsを動かしているElasticBeanstalkにpuma_worker_killerを入れる方法

経緯 Railsを動かしているElasticBeanstalkでメモリの消費量が増大している 定期的/一定量のメモリを消費したらアプリをリスタートしたい 注意事項 まずはRailsやpumaなどを最新にして、自アプリ以外が原因のメモリリークをなくしましょう っていうか自アプ…

Amazon Elastic Beanstalk でデプロイ時に database.yml に database.example.yml をsymlinkする方法

database.yml をgitにcommitしたくないよね... そんな時に 先に方法 files: "/opt/elasticbeanstalk/hooks/appdeploy/pre/01a_symlink_database_yml.sh": mode: "000777" content: | #!/bin/bash cd /var/app/ondeck/config ln -sf database.example.yml dat…

ロードバランシングしている場合、サーバまたいでもRailsのcookie sessionって保持されるか不安になった時に見るページ

いつもはkey-valueストアでやっているので、cookie sessionを使うとなった時に心配になったのでメモ 先に結論 sessionは保持される 理由 cookie sessionは、ブラウザ側でsessionの情報を保持して、サーバ側に情報を持たないから cookieおさらい cookie : web…

Amazon Elastic Beanstalk で t2.micro で Rails をデプロイすると、gem install に失敗する件

先に結論 もう少し良いインスタンスを使う 原因 bundle install 時に メモリが不足が原因で native extension のビルドに失敗している エラーメッセージ An error occurred while installing nokogiri (1.6.8.1), and Bundler cannot continue. Make sure th…

HerokuのDBにAmazon Elastic Beanstalkからアクセスする

これは何? Herokuで運用しているアプリを、ふとAmazon Elastic Beanstalkに移行したくなった けれど、軽く試すためだけのために、DBを移行するの大変 そんな時にお手軽に試す為の方法の記録 Heroku から DB の情報を取得する heroku では、database.yml に接…

ActiveRecordeの関連付けで、class名と異なる関連名を使いたい場合、 class_name オプションを使う

こんな場合 class Item < ActiveRecord::Base has_one :item_detail, dependent: :destroy end class ItemDetail < ActiveRecord::Base belongs_to :item end ItemDetail を参照するとき、記述が冗長になってしまう # item って単語が重複するのがキモい ite…

paperclip の写真の格納先をS3に変更する

やりたいこと paperclip の写真の格納先をS3にしたい 方法 Paperclip に S3 用のオプションがあるので、それを使う aws-sdk のインストール Gemfile gem 'aws-sdk' paperclip のデフォルトの設定を追加 config/application.rb class Application < Rails::Ap…

Paperclip を使って Rails アプリに画像アップロード機能を追加する

やりたいこと Rails アプリに画像アップロード機能を追加したい 方法 thoughtbot/paperclip を使う paperclip のインストール Gemfile # 次のイテレーションで aws-sdk を使うが、その時に ver2 を使いたいので、Paperclipを最新のものにした gem 'paperclip…

cocoon を使って、1フォームで1対多のモデルを動的に編集できるようにする

やりたいこと Railsで1対多のmodelがあるときに、 親modelのformで子modelを動的に追加したり削除したりしたい 方法 nathanvda/cocoon を使う つくりかた Gemfile gem 'cocoon' Item の scaffold を generate rails g scaffold item name:string price:integ…

Rails高速化のためのパフォーマンスチューニングに役立つツール 8個+α

これは何? レスポンスタイムが遅くて辛いけど原因が特定できないときに役立つツールをまとめてみました Rails以外でも使えるものも一緒くたに書いているけど、気にしない! やらないこと それぞれのツール詳細な説明 気が向いたら個別記事を書く 環境 Rails 4…

AWS Elastic Beanstalkの環境のSWAPをやってみる

環境の作成 dev-env は環境名 eb create dev-env 環境変数 設定 eb setenv SECRET_KEY_BASE=****** -e dev-env 確認 eb printenv dev-env Environment Variables: RACK_ENV = production SECRET_KEY_BASE = ****** RAILS_SKIP_MIGRATIONS = false RAILS_SKIP…

Railsスタイルガイドななめ読み

ruby読んだついでにこっちも読んどく 原文: bbatsov/rails-style-guide 日本語訳: moneyforward/rails-style-guide Routing RESTfulなresourceにアクションを追加する場合、member と collection を利用する #config/routes.rb resources :subscriptions do …

Rails newした後Rubocopでやること色々

Rubocopって何? bbatsov/rubocop Rubyの静的コード解析器 ruby-style-guideを遵守させる 問題点について自動的に修正してくれる Rubocop入れると何が良いの? ruby-style-guideという標準的なコーディングスタイルガイドにコードが準拠する 可読性up 不穏なコ…

CircleCIをRailsで使う

CircleCIってなに? SaaSのCIツール SasS Software as a Service 必要な機能だけサービスとして切り出したソフトウェア インターネット経由でサービスを提供するのが一般的 CI Continuous Integration 継続的インテグレーション ビルドやテストを継続的に実行…

MVCのおさらいと、RailsのMVCについて説明する

先にまとめ RailsのMVCと原義のMVCは異なる ビジネスロジックはModelに実装する Skinny Controller, Fat Model RailsにはFat Modelをリファクタリングする仕組みが色々あるよ MVCの目的 コードの再利用性と関心事の分離 コードの再利用性 : ビジネスロジック…

Rails の development 環境で使えそうなgemをまとめる

ざっくりとした覚え書き ログ関係 rails-flog ログのParametersやSQLを整形してくれる quiet_assets 動的なアセットパイプラインの生成時に出力されるログを消してくれる pry関係 こっちでも解説してる → pryとそのプラグイン色々メモ - kasei_sanのブログ p…

Turbolinksについて調べてみた

先にまとめ TurbolinksWay(後述)にそって作ればすごい機能 独自実装でリッチなサイトを既に作っている場合、競合地獄がまってるよ!! よくこんなの標準機能にのっけたな Turbolinksって何? Rails4.0から採用された、レンダリング高速化のためのgem ActionPack…

Aseets Pipeline についてまとめた

Aseets Pipeline ってなに? Rails3.1から実装 Rails4から別gemに sprockets-rails sprockets(および、sprockets-rails)を使って、以下の処理を行う CoffeeScriptや、SCSS等の高級言語を変換 マニフェスト(後述)に従って、js, css を1ファイルにまとめる ファ…

Rails4.1 から入ったSpringって何よ?

概要 rails c 等を叩く時に、毎回Railsの初期化を行わなくなるので、開発速度が向上するよ!! Springサーバが起動して、変更を監視して必要に応じて再ロードする Rails4.1以降は標準で入っていて、勝手に起動したり終了したりしてる http://railsguides.jp/4_…

ざっくりRailsの各バージョンの流れ

Rubyの推奨/必須バージョンの推移 Rails 3 : 1.8.7以降必須 Rails 3.2 : 1.8.7最終ブランチ Rails 4 : 1.9.3以上必須。2.0推奨 Rails 5 : 2.2.1以上必須 シンボルのガーベージコレクトを宛てにしているらしい 今更ながらだけど、4系は2.0推奨なのね Railsガ…

Railsの各コンポーネントについてざっくり理解する

はじめに Rails4.2系の話です いろいろある Railtie ActionMailer ActionPack ActionView ActiveJob ActiveModel ActiveRecord ActiveSupport Railtie Railsの中核部分 Railtieに基づいたプラグインの組み合わせで、Rails機能を拡張できる ActionController…

Railsのライフサイクルがよくわかってなかったので調べた

今度はRailsについて バージョニング Rubyと同じく、セマンティックバージョニング → Ruby on Rails のメンテナンスポリシー | Rails ガイド メジャー : 重大性が高い変更 マイナー : 新機能を追加。API変更もありえる 大きな変更を行う場合、非推奨通知を出…

validates acceptance を設定した属性は、テーブルにない場合は自動的にVirtual Attributesになる

Virtual Attributes ActiveRecordの機能 文字通り仮想的な属性 テーブルの実カラムには無いけど、エントリフォーム等に入れたい値を格納する場所 Virtual Attributes の作り方 モデルに属性をattr_accessorで追加する 簡単。 Virtual Attributes の使い方 DB…

Railsガイド Rails のコマンドラインツール 2.10 カスタムRakeタスク

Rails のコマンドラインツール | Rails ガイド ジェネレータ rails generate task で生成 $ rails generate task sample_task create lib/tasks/sample_task.rake namespace :sample_task do end Rakeタスクの基本形 namespace :sample_task do desc 'あいさ…

pryとそのプラグイン色々メモ

pry-rails pryをrailsで使うためのgem pryと、pry-railsの使いそうなコマンド help : 使い方が出てくるから読め cd 、ls : オブジェクトを行き来できる tab補完してくれるよ! ls -m : メソッドだけ表示 ls --grep : 絞りこみ #{command}; : 戻り値をechoしな…

Rails ガイド Active Record バリデーション

Active Record バリデーション | Rails ガイド クライアント側でのバリデーションは扱いやすく便利ですが、一般に単独では信頼性が不足します。JavaScriptを使用してバリデーションを実装する場合、ユーザーがJavaScriptをオフにしてしまえばバイパスされて…

Railsガイド Active Record の関連付け(1.関連付けを使用する理由〜2.関連付けの種類)

Active Record の関連付け (アソシエーション) | Rails ガイド 関連付けのメリット Railsがテーブル間の関連を知ることで、必要な作業を勝手にやってくれる 例えば、顧客と注文が関連していたら、顧客の情報を消した時に、顧客に紐付いた注文を全部消してく…

Railsガイド Active Record クエリインターフェイス:2.条件〜11.ロック

Active Record クエリインターフェイス | Rails ガイド 2.条件 # 条件を配列で Client.where('orders_count=? AND locked=?', 2, true) # プレースホルダで書くとわかりやすい Client.where('orders_count=:count AND locked=:locked', count: 2, locked: tr…

Railsガイド Active Record クエリインターフェイス:1.データベースからオブジェクトを取り出す

Active Record クエリインターフェイス | Rails ガイド Model.find(options)という操作を要約すると以下のようになります。 与えられたオプションを同等のSQLクエリに変換します。 SQLクエリを発行し、該当する結果をデータベースから取り出します。 得られ…

Railsガイド Active Record の基礎

Active Record の基礎 | Rails ガイド 目的 Rails4のActive Recordを知る 検索、バリデーションの理解が薄いので理解しなおす Active Record : デザインパターンの一種 オブジェクトとは永続的なデータであり、そのデータに対する振る舞いでもあります。 Act…