herokuでMemory Quota Exceededと言うのが出るようになったので、puma_worker_killerを入れた話
最近、herokuで稼働させているRailsのアプリが「Memory Quota Exceeded」と言われる事が多くなり、定期的にワーカーの再起動をしたいと思ってました。 見る限り、swapも出てしまい、レスポンスも遅くなっているようです。 このような場合、heroku以外だと、unicornを使うので、unicorn_worker_killerを入れるのですが herokuだとpuma推薦なのでpuma使っていました。 で、pumaもuniconのようにworker killer系の物がある ...
Ruby 2.2 がリリースされました
クリスマスプレゼントなのか Ruby2.2 がリリースされてました。 Rails使いとしては たとえば、新しい Ruby のガーベージコレクタは Symbol オブジェクトのガーベージコレクトができるようになりました。 2.2 以前の GC は Symbol オブジェクトのガーベージコレクトに対応していなかったため、この新しい GC によって Symbol オブジェクトについてのメモリ使用が削減されます。 Rails 5.0 ではこの Ruby 2.2 以降でのみサポートされる Symbol G ...
Windowsに複数バージョンのRubyをインストールする
今回の要件 Windowsに複数のバージョンのRubyをインストールする。 バージョンの切り替えを出来るようにする。 ネイティブなgemもインストールしたい。 たとえばnokogiri とか jsonとか ダウンロード ということで、まずは必要なRubyのダウンロード。 以下のページからインストーラをダウンロードします。 ※からもリンクがあります。 今回はシステム側に2.0.0、切り替え用として1.8.7をインストールします。 なので、ダウンロードページから 2.0.0のインストーラと1.8.7 ...
rvmを使った環境で、unicornをcrontabなどに登録する時の手順
rvmを使って実行環境を分けつつ、crontabなどで自動起動をさせたい時 まずはrvmでラッパーを作成する rvm wrapper 2.0.0@rails4.0 start unicorn_rails これを実行すると、~/.rvm/binにstart_unicorn_railsというファイルが出来上がる このファイルに対してunicorn_railsに指定するパラメータを指定してやると rvmを読み込んだ状態でunicorn_railsを実行してくれる。
Rails 4.x 本番環境でSQLの実行ログを表示したい場合の設定
config/environments/production.rbファイルの中の config.log_level に :debug を設定します。 config.log_level = :debug
Rails セッションのID(session.session_id)を得る方法
Rails 3.x 以降でセッションのIDを得る方法が session.session_idでは無くなったようです。 request.session_options
Ubuntu 13 and Ruby on Rails 4 で、capybara-webkitを使ってcucumberでテスト
必要なパッケージをインストールする たぶん、このインストールだけで済むはず。 sudo apt-get install libqtwebkit-dev xvfb ttf-kochi-mincho-naga10 ttf-kochi-gothic-naga10 入れている物は、 libqtwebkit-dev qtwebkitの開発用モジュール Qtはデスクトップと組込み開発向けのクロスプラットフォームアプリケーション開発フレームワーク らしい xvfb 仮想フレームバッファ ttf-kochi-m ...
Aptana Studio 3でEGitを入れているのに、Aptana Studio 3でインストールされるPortableGitが優先されてしまう問題
Aptana Studio 3でEGitを入れているのに Aptana Studio 3でインストールされるPortableGitが優先されてしまう問題 ですが Preferencesの設定の中にある - という所が二つあると思います。 これは、Aptana Studio 3が内包しているPortable Gitの設定と、EGitの設定が両方出てきているという事です。 で、EGitの方を優先で使いたい場合ですが - のサブオプションがある方がEGitで、サブオプションがない方がPortableG ...
Rubyの配列のデータをランダムにソートする
Rubyの配列をランダムにソートするには a = b = (a + b).sort_by{rand} #=>
Rubyで配列からハッシュを作成する
たまに、配列になっているデータをハッシュに変えてしまいたい時があったりします。 data = , , , , ] という感じのデータですね。 これをハッシュにするには、ゴリゴリやる場合 hash_data = {} data.map{|c| hash_data] = c} となりますが、別のやり方として Hashの「self -> Hash」というメソッドを使ってみます。 Rubyのドキュメントにもあるのですが Hashの[]メソッドとして定義されており array_data = Hashという ...
Ruby(Ruby on Rails)で、使わなくなったメソッドをdepricatedにする
ある程度コードを書いていると、使わなくなったメソッドや、新しいメソッドを作ったので使って欲しくないメソッドなどが多々出てくるかと思います。 コメントで書いておいても、使う人はいるし、既存コードで知らぬ間に使ってあったりもします。 そんな時は depricatedをログに出力するようにしてしまいましょう。 そうすれば、その処理を通るたびにワーニングとしてdepricatedなメッセージが出力されるので 対処しやくすなります。 書き方としては、 def old_method warn " ...
ScalaのArrayなどで、Rubyのeach_with_indexのようなインデックス付きイテレーションを使う
Rubyでは .each_with_index |value, index| p "#{index}番目は#{value}です" end というような書き方が出来ます。 これをScalaで書くにはどうするか。 val list = List("one", "two", "three") list.zipWithIndex.foreach{ case(value, index) => println(" ...
RailsからMySQLのテーブルを作成する時にLONGBLOBなカラムを作成する方法
RailsからMySQLのテーブルを作成するには Railsのマイグレート機能には、カラム属性としてbinaryがあるのですが、これを指定してもMySQL上ではBLOBというカラム属性になります。 構文としては create_table :user_photos do |t| t.string :name t.binary :photo_image end もっと大容量のLONGBLOBが欲しい! という時にはbinaryの所にオプションで:limit => 16.megabyte ...
RVMをセットアップする
Rubyは、リファレンス実装でC言語によるRuby(CRuby)や、Javaでの実装のJRuby、.NETのIronRubyなど、多くの実装があります。 これを一つ一つ環境構築してたら、大変なので RVMというRubyの管理ツールをインストールしてみます。 これで出来る事は Rubyのバージョンを切り替える CRubyからJRubyに切り替える gemのセットを作って切り替える など お手軽に入れるには、Ubuntuなどのユーザ領域にRVMをインストールする ということで、インストールして見ます ...
ActiveRecordのscopeで作成した条件などをSQLとして出力する
scope :active, where('deleted_at is null') というスコープを設定したとして この条件を含むSQLをコード内で取得したい場合ってありますよね。 SQL書いてでゴニョゴニョしたい場合とか…。 そんな時には Article.active.to_sql としてやれば、 select * from articles where deleted_at is null というSQLが取得出来ます。 参考例 # === タグ class Tag < Act ...
number_with_delimiter (数値をカンマ区切りで出力)
Ruby on Railsで数値を整形する場合、ActionViewには便利なヘルパーがあります。 number_with_delimiter です。 number_with_delimiter(12345678) # => 12,345,678 number_with_delimiter("123456") # => 123,456 number_with_delimiter(12345678.05) # => 12,345,678.05 number_w ...
DBとは関係ないフォームの項目をバリデートする
class ActiveForm include ActiveModel::Conversion extend ActiveModel::Naming include ActiveModel::Validations def persisted?; false; end def initialize(attributes = {}) attributes.each do |name, value| send("#{name}=", value) rescue nil end ...
will_paginateでSQLを直接実行した結果をwill_paginate対応にする
sql = " SELECT * FROM users WHERE created_at >= '#{2.weeks.ago}' ORDER BY created_at DESC " @users = User.paginate_by_sql(sql, :page => params, :per_page => 20) こんな感じ
Rails 3 用のacts_as_paranoid
Rails 2.x系で、論理削除と言ったら、もうこれ!というのが acts_as_paranoid でした。 Rails 3.x系では rails3_acts_as_paranoid を使います。 インストールの方法は GemFileに gem "rails3_acts_as_paranoid", "~>0.2.0" と追記して bundle実行 ※Rails3.1の場合は、GemFileに書くプラグインのバージョンが"~>0.1.4"になります。 ※Rails3.0の場合は、Gem ...
Rails 3.2.8をUbuntuに一からインストールしてみる
UbuntuにRails3.2.8の実行環境を一からインストールしてみます。 Ubuntuは12.04を使用します。 まずは Rubyから、と言いたい所ですが、必要パッケージ類から sudo apt-get install make build-essential libssl-dev zlib1g-dev \ apache2-mpm-prefork apache2-prefork-dev libapr1-dev libaprutil1-dev \ libcurl4-openssl-dev li ...