Ruby
Apache のヘッダーに色々と書いたら Sinatra で書いたアプリケーションが 404 を返したり不穏な挙動を起こすようになってしまった!ドキュメントを読め!というお話。 ことの発端 社内で使う小さな問い合わせフォームを Sinatra でミニマムに実装したのです…
ふわっとしたタイトルで申し訳ないのですが、なにぶんマシンそのものがクラッシュしてしまうため、あまり検証もできていません。実際に起こった事象の報告と、一応の解決策のみ記載しておきます。 何が起こるのか 実際に問題が起こった環境の場合 Kaspersky …
RMagick が内部で使用している ImageMagick には PDF を jpg などの画像に変換する機能があります。 convert test.pdf test.jpg一番簡単な使い方は上の通り。手元の環境では特に jpg が残念な画質になりますが、そのあたりはオプションで(ある程度)補完が…
大きな開発が一段落したので環境の更新をしておこう、と思い年単位ぶりくらいに brew update brew upgrade rbenv ruby-buildを叩き、せっかくだから記事執筆時にリリースされたばかりの最新版 Ruby 2.1.5 をインストールしようと rbenv install 2.1.5を実行…
html から簡単に PDF が作れる便利なプラグインですが、割と面倒な行程が必要だったのでメモ。Rails 4.1 で確認しました。 インストール Gemfile で以下のように記述します。 gem 'wkhtmltopdf-binary' gem 'wicked_pdf' が、環境によってはこれでは動作しま…
表題のとおりのサンプルプロジェクトを作成します。まずはプロジェクトを新規作成します。 rails new sample_uploadscaffold でアップロード機能を作成、この辺はいつもどおり。 bundle exec rails g scaffold attachments title:string path:text何かと不便…
表題の件ですが Rails アプリの Gemfile で次のような指定をしていたところ、更新時にエラーが発生しました。 gem 'rubyzip', :require => 'zip/zip' エラーの原因は rubyzip gem のバージョンが 1.0.0 になった際にrequire 以降を記述する必要が無くなった…
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 を用いたアプリケーションであれば何でも使えるのですが、今回は Rails で使う場合のお話をします。 導入手順 まずアプ…
あるテーブルのすべてのフラグを false にしたい時に、件数が多くなる事が予想されたので1000件ずつ処理しようと考え、次のようなコードを書きました。 while Hoge.where("flag IS true").count > 0 sql = "UPDATE hoge SET flag = false WHERE flag IS true…
表題の通りに、マジックコメントで # coding: utf-8 のように指定した ruby のスクリプトを使っている場合 open("hoge.txt", "w") do |file| file.puts NKF.nkf("-s", "ほげほげ") end のように NKF で変換をかけて書き込もうとしても、マジックコメントで指…
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…
タイトルの通り rvm でインストールした Ruby 1.9.3 で OpenSSL ライブラリを用いた時にエラーになりました。テストに使ったスクリプトは以下の通り。 require 'net/https' https = Net::HTTP.new('encrypted.google.com', 443) https.use_ssl = true https.…
CarrierWave は便利なプラグインですが、デフォルト設定のまま Rails で使うと public 以下の誰でもアクセス可能なディレクトリにファイルを書き込んでしまいます。これでは困る場合は config/application.rb で以下のようにデフォルトのアップロード先を指…
Ruby のような言語を使っていると値渡しと参照渡しなどという概念もあまり意識しませんが、配列の代入は面白い挙動をするので備忘録として残しておきます。確認は Ruby 1.9.2 p290 を使い Max OS SnowLeopard で行いました。まず String 型を別の変数に代入…
Nokogiri を使って html をパースし出力する時は以下のように記述します。 require 'nokogiri' Nokogiri::HTML('<p>test</p>').to_s これは正しく動きますが、完全な html の形で出力されます。 "\n<html><body><p>test</p></body></html>\n" 部分的に html をパースしたい…
ApplicationController に以下のような認証用のメソッドを定義する事は、よくあると思います。 # coding: utf-8 class ApplicationController < ActionController::Base # 略 def current_user # ログイン中のユーザオブジェクトを返す end def logged_in? #…
恐らく --no-locale オプションをつけ忘れたせいで PostgreSQL でどうしても全角ハイフンがうまく扱えなかったので、かっとなって変換モジュールを書いてみました。対象となる文字を、別の文字へ変更します。なお、文字コードは UTF-8 を使う前提で記述して…
久しぶりに port 本体を更新してインストールを行ったら openssl がバージョンアップしてしまい、その影響であちこちおかしくなったのでメモ。 ssh がつながらない sudo port install openssh他も port でインストールできるものは大体これで最新版にすれば…
Ruby に標準でついている Benchmark モジュールを使ってベンチマークを取ります。 まず、環境によっては require が必要なのでチェックします。 require 'benchmark' ruby 1.8.7 の場合 false が返されますが、問題なくベンチマークを取る事ができます。次に…
古いバージョンの uuidtools を使っているプロジェクトで、最新版(記事執筆現在 2.1.1)の uuidtools を使うと、そのままでは実行できません。 require 'rubygems' require 'uuidtools' # これがエラーになる UUID.random_create どうやら呼び出し方がかわ…
今回は PDF のメタ情報や、ページのアウトラインを設定します。 パスワードの設定 PDF にパスワードを設定し、情報の公開を制限します。パスワードはオーナーおよびユーザ向けの2種類が設定可能で、オーナーのパスワードは必須になります。オーナーとユーザ…
はじめに PDF 作成用のライブラリです。公式 Wiki は下記参照。Ruby のドキュメントはありませんが、ほとんどのメソッドは命名方式を Ruby らしく変更する事でそのまま流用可能です。http://libharu.org/wiki/Main_Page困ったことに(ってすごいことなんです…
この前書いた hparser が github に fork されたらしいので見てきました。http://github.com/hotchpotch/hparser/tree/masterおお、確かに移動している…さっそく取得してみようと思ったのですが Rails の environment.rb でこんな風に書いても gem が見つか…
はてな記法のパーサはないかな、と思ってぐぐったら本当にあったのでメモ。 gem になっているので config/environment.rb に以下のように記述。 config.gem 'hparser' そして、いつもどおり rake を実行。 sudo rake gems:installパーサの使い方はちょっと変…
はじめに Ruby から外部のコマンドを実行する場合、使えるメソッドは以下のとおりです。 exec system `` IO.popen これらそれぞれの使い方と、実行結果を解説します。 exec exec はコマンドの失敗時にエラーを返す他は何ら値を返しません。irb で実行すると…