Ruby

Sinatra を使う場合のセキュリティ設定について

Apache のヘッダーに色々と書いたら Sinatra で書いたアプリケーションが 404 を返したり不穏な挙動を起こすようになってしまった!ドキュメントを読め!というお話。 ことの発端 社内で使う小さな問い合わせフォームを Sinatra でミニマムに実装したのです…

Yosemite 環境に Homebrew から rbenv を用いる際にセキュリティソフトが悪さをしているかもしれない

ふわっとしたタイトルで申し訳ないのですが、なにぶんマシンそのものがクラッシュしてしまうため、あまり検証もできていません。実際に起こった事象の報告と、一応の解決策のみ記載しておきます。 何が起こるのか 実際に問題が起こった環境の場合 Kaspersky …

RMagick で PDF を jpg や png に変換する

RMagick が内部で使用している ImageMagick には PDF を jpg などの画像に変換する機能があります。 convert test.pdf test.jpg一番簡単な使い方は上の通り。手元の環境では特に jpg が残念な画質になりますが、そのあたりはオプションで(ある程度)補完が…

rbenv の更新をした後 rbenv install がエラーになった話と gcc の更新

大きな開発が一段落したので環境の更新をしておこう、と思い年単位ぶりくらいに brew update brew upgrade rbenv ruby-buildを叩き、せっかくだから記事執筆時にリリースされたばかりの最新版 Ruby 2.1.5 をインストールしようと rbenv install 2.1.5を実行…

wicked_pdf を Rails アプリケーションで使うまで

html から簡単に PDF が作れる便利なプラグインですが、割と面倒な行程が必要だったのでメモ。Rails 4.1 で確認しました。 インストール Gemfile で以下のように記述します。 gem 'wkhtmltopdf-binary' gem 'wicked_pdf' が、環境によってはこれでは動作しま…

Rails 4 + Ruby 2.0 で画面遷移無しのファイルアップロード

表題のとおりのサンプルプロジェクトを作成します。まずはプロジェクトを新規作成します。 rails new sample_uploadscaffold でアップロード機能を作成、この辺はいつもどおり。 bundle exec rails g scaffold attachments title:string path:text何かと不便…

rubyzip のバージョン更新でエラーが起こる

表題の件ですが Rails アプリの Gemfile で次のような指定をしていたところ、更新時にエラーが発生しました。 gem 'rubyzip', :require => 'zip/zip' エラーの原因は rubyzip gem のバージョンが 1.0.0 になった際にrequire 以降を記述する必要が無くなった…

Ruby 1.8 系と 1.9 系では Timeout::Error の継承元クラスが異なる

1.8 系の最終版である Ruby 1.8.7 では Timeout::Error < Interrupt < SignalException < Exception < Object < Kernelであり Ruby 1.9 系では Timeout::Error < RuntimeError < StandardError < Exception < Object < Kernel < BasicObject になっています…

Rack::Protection を Rails 3.2.X から使う

脆弱性対策を自分で考えるのは限界があるので、仕組みについてはきちんと知った上でライブラリのお世話になりましょう。これ自体は Rack を用いたアプリケーションであれば何でも使えるのですが、今回は Rails で使う場合のお話をします。 導入手順 まずアプ…

ActiveRecord のキャッシュをオフにする

あるテーブルのすべてのフラグを false にしたい時に、件数が多くなる事が予想されたので1000件ずつ処理しようと考え、次のようなコードを書きました。 while Hoge.where("flag IS true").count > 0 sql = "UPDATE hoge SET flag = false WHERE flag IS true…

Ruby 1.9 系ではファイルのオープン時にエンコーディングを指定しないとうまく書き込めない

表題の通りに、マジックコメントで # coding: utf-8 のように指定した ruby のスクリプトを使っている場合 open("hoge.txt", "w") do |file| file.puts NKF.nkf("-s", "ほげほげ") end のように NKF で変換をかけて書き込もうとしても、マジックコメントで指…

mail-iso-2022-jp gem を用いた際に Encoding::UndefinedConversionError が発生

Rails のアプリケーションで mail-iso-2022-jp gem の 1.1.6 を使っていたところ、表題のエラーが発生。 gem の中身を確認してみました。 vi /path/to/gem/mail-iso-2022-jp-1.1.6/lib/mail-iso-2022-jp/patches.rb# coding:utf-8 require 'mail' require 'b…

Ruby の OpenSSL ライブラリで証明書のエラー

タイトルの通り rvm でインストールした Ruby 1.9.3 で OpenSSL ライブラリを用いた時にエラーになりました。テストに使ったスクリプトは以下の通り。 require 'net/https' https = Net::HTTP.new('encrypted.google.com', 443) https.use_ssl = true https.…

Rails 3.2 で CarrierWave を使う時に public 以下にファイルを置きたくない場合

CarrierWave は便利なプラグインですが、デフォルト設定のまま Rails で使うと public 以下の誰でもアクセス可能なディレクトリにファイルを書き込んでしまいます。これでは困る場合は config/application.rb で以下のようにデフォルトのアップロード先を指…

Ruby の配列を別の変数に代入した際の挙動

Ruby のような言語を使っていると値渡しと参照渡しなどという概念もあまり意識しませんが、配列の代入は面白い挙動をするので備忘録として残しておきます。確認は Ruby 1.9.2 p290 を使い Max OS SnowLeopard で行いました。まず String 型を別の変数に代入…

Nokogiri で html の断片を出力したい時

Nokogiri を使って html をパースし出力する時は以下のように記述します。 require 'nokogiri' Nokogiri::HTML('<p>test</p>').to_s これは正しく動きますが、完全な html の形で出力されます。 "\n<html><body><p>test</p></body></html>\n" 部分的に html をパースしたい…

Anonymous Controller を使ってコントローラのテストを RSpec で記述する

ApplicationController に以下のような認証用のメソッドを定義する事は、よくあると思います。 # coding: utf-8 class ApplicationController < ActionController::Base # 略 def current_user # ログイン中のユーザオブジェクトを返す end def logged_in? #…

全角ハイフンとの戦い

恐らく --no-locale オプションをつけ忘れたせいで PostgreSQL でどうしても全角ハイフンがうまく扱えなかったので、かっとなって変換モジュールを書いてみました。対象となる文字を、別の文字へ変更します。なお、文字コードは UTF-8 を使う前提で記述して…

openssl 1.0 を MacPorts で入れて困ったときのメモ

久しぶりに port 本体を更新してインストールを行ったら openssl がバージョンアップしてしまい、その影響であちこちおかしくなったのでメモ。 ssh がつながらない sudo port install openssh他も port でインストールできるものは大体これで最新版にすれば…

Ruby のベンチマーク

Ruby に標準でついている Benchmark モジュールを使ってベンチマークを取ります。 まず、環境によっては require が必要なのでチェックします。 require 'benchmark' ruby 1.8.7 の場合 false が返されますが、問題なくベンチマークを取る事ができます。次に…

uuidtools を使う時の注意点

古いバージョンの uuidtools を使っているプロジェクトで、最新版(記事執筆現在 2.1.1)の uuidtools を使うと、そのままでは実行できません。 require 'rubygems' require 'uuidtools' # これがエラーになる UUID.random_create どうやら呼び出し方がかわ…

Haru free PDF library でメタ情報やアウトラインを操作

今回は PDF のメタ情報や、ページのアウトラインを設定します。 パスワードの設定 PDF にパスワードを設定し、情報の公開を制限します。パスワードはオーナーおよびユーザ向けの2種類が設定可能で、オーナーのパスワードは必須になります。オーナーとユーザ…

Haru free PDF library を試してみる

はじめに PDF 作成用のライブラリです。公式 Wiki は下記参照。Ruby のドキュメントはありませんが、ほとんどのメソッドは命名方式を Ruby らしく変更する事でそのまま流用可能です。http://libharu.org/wiki/Main_Page困ったことに(ってすごいことなんです…

hparser も git へ?

この前書いた hparser が github に fork されたらしいので見てきました。http://github.com/hotchpotch/hparser/tree/masterおお、確かに移動している…さっそく取得してみようと思ったのですが Rails の environment.rb でこんな風に書いても gem が見つか…

hparser

はてな記法のパーサはないかな、と思ってぐぐったら本当にあったのでメモ。 gem になっているので config/environment.rb に以下のように記述。 config.gem 'hparser' そして、いつもどおり rake を実行。 sudo rake gems:installパーサの使い方はちょっと変…

外部のコマンドを実行

はじめに Ruby から外部のコマンドを実行する場合、使えるメソッドは以下のとおりです。 exec system `` IO.popen これらそれぞれの使い方と、実行結果を解説します。 exec exec はコマンドの失敗時にエラーを返す他は何ら値を返しません。irb で実行すると…