sequel動かなかったのでメモ

mysqlでdb作ってサンプルを実行しても

LoadError: cannot load such file -- mysql (Sequel::AdapterNotFound)
が出るので、とりあえずmysql2をgemでインスコしようとしたらエラー出た

http://qiita.com/s_osa/items/34d1814b5b213ca29af7 の通り

sudo apt-get install libmysqld-dev

するとmysql2インスコできた
それでもエラーが起きるので、conenct文を変えて

Sequel.connect(:adapter => 'mysql2', :user => 'username', :password => "passw0rd", :host => "xxx.xxx.xxx.xxx" , :database => "test_database")

の形式にしたら動いた

rubyでamazonAPIの検索URL生成

amazon検索のAPIの検索URL生成。

require 'time'
require 'openssl'
require 'base64'
require 'cgi'

host = "ecs.amazonaws.jp"
path = "/onca/xml"
seckey = {シークレットキー}

def build_params(params)
  res = ""
  params.keys.sort.each {|key|
    prefix = (res.length > 0 ? "&" : "")
    res += "#{prefix}#{key}=#{CGI.escape(params[key])}"
  }
  res
end

def create_timestamp
  Time.now.strftime("%Y-%m-%dT%H:%M:%SZ")
end

def create_signature(key, data)
  Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), key, data)).strip()
end

params = {
  :Service        => "AWSECommerceService",
  :AWSAccessKeyId => {アクセスキーのID},
  :AssociateTag   => {なんたら-22みたいなやつ},
  :Operation      => "ItemSearch",
  :SearchIndex    => "Books",
  :Title          => "鳴子ハナハル",
  :Timestamp      => create_timestamp(),
  :Version        => "2010-09-01"
}

param_string = build_params(params)

sign_string = "GET\n#{host}\n#{path}\n#{param_string}"
signature   = create_signature(seckey, sign_string)
url = "http://#{host}#{path}?#{param_string}&Signature=#{CGI.escape(signature)}"

p url

amazonAPIアクセスするにはキー取得が必要だったりして色々めんどい。
シークレットキーとアクセスキーIDの取得方法は
http://www.ajaxtower.jp/ecs/
にかいてある
Signature作るときにキーの順序をバイトコード順にしないといけなかった

Padrinoでエラー時に別ページが出るのを防ぐ

class Hoge < Padrino::Application

  register Padrino::Rendering
  register Padrino::Mailer
  register Padrino::Helpers

  enable :sessions
  # ↓2つの設定をいれると出なくなる
  disable :raise_errors
  disable :show_exceptions

end