ラベル Ruby の投稿を表示しています。 すべての投稿を表示
ラベル Ruby の投稿を表示しています。 すべての投稿を表示

2013-11-07

checkinstallでrubyのrpm作成

checkinstallコマンドだけで失敗するときは次のオプションをくっつけてみるとうまくいった
checkinstall --fstrans=no -R

2012-07-25

IAM roles for EC2 instancesを使ってみた

EC2インスタンスのIAMロールとは?
  • 今までIPアドレスで利用範囲を絞っていたところを、このEC2インスタンスから!みたいな制約で利用できるようにする機能
  • aws-sdkを使えばcredentials周りのコードを簡略化できる
制約とか
  • roleは、EC2インスタンス起動時に選択することができる
  • roleは1つしか割り当てられない
  • 既存のインスタンスにはroleを割り当てることはできない
  • 既にroleが割り当てられているインスタンスからroleを外すことはできない
  • roleのPermissionsの変更は即時反映される
roleの作成
AWS ConsoleのIAMのところからCreate Roleをクリック
roleの名前を入力してContinue
適当なPolicyをSelect(後から編集もできるのでてきとーに)
Policyの名前を決めて、Policy Documentを確認したらContinue
内容を確認して問題なければCreate Role
はい、出来上がりましたヾ(*・ω・)シ
あとは、作成したroleを割り当ててインスタンスの起動
通常通りインスタンス起動のウィザードを辿っていくとInstance DetailsのところでIAM Roleの選択肢がでてくるので先ほど作成したroleを選択

起動を待っている間に、s3バケットのURLを一覧表示するようなサンプルプログラムの作成
通常版
#! /usr/bin/ruby
require 'rubygems'
require 'aws-sdk'

my_access_key_id = 'xxxxxxxxxxxxxxxxxxxx'
my_secret_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

AWS.config({
  :access_key_id => my_access_key_id,
  :secret_access_key => my_secret_key
})

sts = AWS::STS.new()
session = sts.new_session()
#puts "Session expires at: #{session.expires_at.to_s}"

#s3 = AWS::S3.new(session.credentials)

for bucket in s3.buckets
 puts bucket.url
end
てな具合で見慣れたCredentials周りのコードを書く訳ですがIAM roles for EC2 instances版だとここを省くことができます
#! /usr/bin/ruby
require 'rubygems'
require 'aws-sdk'

s3 = AWS::S3.new()

for bucket in s3.buckets
 puts bucket.url
end
と、こんな単純に。
実行結果はどちらも同じように
./list_s3_urls.rb
http://bucket1.s3.amazonaws.com/
http://bucket2.s3.amazonaws.com/
http://bucket3.s3.amazonaws.com/
みたいな感じで表示してくれます
aws-sdkを利用しない場合はcurlを使って
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role1
{
  "Code" : "Success",
  "LastUpdated" : "2012-07-25T04:43:21Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "xxxxxxxxxx",
  "SecretAccessKey" : "xxxxxxxxxx",
  "Token" : "xxx",
  "Expiration" : "2012-07-25T11:15:42Z"
}
みたいに最後の/の後にEC2インスタンスに割り当てられたroleの名前を入れてあげれば、一時的に利用できるAccessKeyIdとSecretAccessKeyを含むレスポンスが得られるのでこれを利用すれば良いみたいです。

2012-07-18

rightresource 0.4.5でログインエラー

RightScale APIをrubyから使うためのラッパーモジュールrightresource 0.4.5なのですが、比較的最近作成したRightScaleアカウントに対してだとエラーが起こるようです。
RestClient::Forbidden: 403 Forbidden: Basic auth is deprecated for calls other than login. Please 'login' to get a session and pass the session back for further actions.
中身をのぞいてみると、rightresourceではBasic認証でAPIにアクセスしているようです。
一方で、RightScale側では比較的新しいアカウントではBasic認証は非推奨になってしまいログイン時に発行されるcookieを用いて各種APIにアクセスする必要がある模様です。
なので、cookie認証でアクセスするよう以下のファイルの29,30行目の間に3行追加してあげれば行けましたよヾ(*・ω・)シ
CentOSの場合
/usr/local/lib/ruby/gems/1.9.1/gems/rightresource-0.4.5/lib/right_resource/connection.rb
Windows7の場合
C:\Ruby\lib\ruby\gems\1.9.1\gems\rightresource-0.4.5\lib\right_resource\connection.rb
@response = @api_object["login"].__send__("get".to_sym, {:x_api_version=>"1.0", :api_version=>"1.0"})
req_opts = {:cookies => @response.cookies, :open_timeout => @open_timeout, :timeout => @timeout}
@api_object = RestClient::Resource.new("#{@api}#{@account}", req_opts)

2012-05-02

Rails3.2のエラーメッセージを日本語にする

デフォルト状態だと
validate :name, :length => {:within => 0..3}
などとバリデーションを設定していると
Name is too long (maximum is 3 characters)
と表示されます。
これを、日本語表記に変更したい場合、作成したアプリケーションのconfig/application.rbの中で設定を行います。
# config.i18n.default_locale = :de
を以下に変更する
config.i18n.default_locale = :ja
そして、日本語表示用のデータである https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml をconfig/locales/ja.ymlとして保存します。 エラーメッセージが日本語に変わりましたヾ(*・∀・)ノ"
Nameは3文字以内で入力してください。
さらに、属性名であるNameも日本語名に変更したい場合は config/locales/ja.ymlの中で属性名の日本語名を定義してあげます
ja:
  attributes:
    name: "名前"
てな具合に。
そうすると
名前 は3文字以内で入力してください。
に変わりました(’’

2012-05-01

Windows7でRuby1.9.3+Rails3.2.6+MySQL5.5な環境構築

いろいろと新しいバージョンが出てきたので開発環境を入れなおしてみたのでメモがてら。

MySQLから
Windows (x86, 32-bit), MSI Installer:mysql-5.5.25a-win32.msi
をダウンロードしてインストール
※64bit版ではrails3標準のmysql2アダプタが対応していないので必ず32bit版!
と思ったけど、あとで入れるMySQL Connector/Cが32bit版なら本体は64bit版でも良いみたい(´・ω・`)

rubyinstaller.orgから
RubyInstallers:rubyinstaller-1.9.3-p194.exe
Development Kit:DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe
をダウンロード
rubyinstaller-1.9.3-p194.exeを実行してrubyをインストール
※「Add Ruby executables to your PATH」にチェックを忘れずに

DevKit-tdm-32-4.5.2-20111229-1559-sfx.exeを実行して適当なディレクトリへ解凍
cmd.exeなどで解凍したディレクトリへ移動
ruby dk.rb init
ruby dk.rb install
でインストール

RubyGemsから
rubygems-1.8.24.zip
をダウンロードして適当なディレクトリへ解凍
cmd.exeなどで解凍したディレクトリへ移動
ruby setup.rb
でインストール

gem install rails
で、Rails3.2.6をインストール

gem install mysql2
で、mysql2アダプタをインストール
You've installed the binary version of mysql2.
It was built using MySQL Connector/C version 6.0.2.
It's recommended to use the exact same version to avoid potential issues.

At the time of building this gem, the necessary DLL files where available
in the following download:

http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip/from/pick

And put lib\libmysql.dll file in your Ruby bin directory, for example C:\Ruby\bin
とメッセージが出るので、素直に従う
このgem作った時は必要なDLLファイルは次のダウンロードにあったよ!
lib\libmysql.dllをC:\Ruby\binとかに入れてね!
ってことだけど、URLは無効なようなので
http://dev.mysql.com/downloads/connector/c/6.0.html
へ行って
mysql-connector-c-noinstall-6.0.2-win32.zip
をダウンロードしましょう
あとは展開して、Rubyをインストールしたディレクトリのbin配下へコピーすればOK

そして、早速アプリケーションの作成
rails new app1 -d mysql

config/database.yml
にmysqlのユーザーとパスワードをセット
あとは、関連モジュールのインストールとscaffoldで雛型の作成、DBの作成、サーバーの起動
bundle install
rails g scaffold task name:string memo:string
rake db:create
rake db:migrate
rails s

あとは
http://localhost:3000/tasks
にアクセスすればアプリケーションにアクセスできますよヾ(*・∀・)ノ"

2011-06-08

Windows7でRuby1.9.2+Rails3+MySQL5.5な環境を構築

※最近インストールした情報をまとめたこちらもどうぞ!

MySQLから
Windows (x86, 32-bit), MSI Installer:mysql-5.5.13-win32.msi
をダウンロードしてインストール
※64bit版ではrails3標準のmysql2アダプタが対応していないので必ず32bit版!
と思ったけど、あとで入れるMySQL Connector/Cが32bit版なら本体は64bit版でも良いみたい(´・ω・`)

rubyinstaller.orgから
RubyInstallers:rubyinstaller-1.9.2-p180.exe
Development Kit:DevKit-tdm-32-4.5.1-20101214-1400-sfx.exe
をダウンロード
rubyinstaller-1.9.2-p180.exeを実行してrubyをインストール
※「Add Ruby executables to your PATH(PATHにbinディレクトリを追加)」にチェックを忘れずに

DevKit-tdm-32-4.5.1-20101214-1400-sfx.exeを実行して適当なディレクトリへ解凍
cmd.exeなどで解凍したディレクトリへ移動
ruby dk.rb init
ruby dk.rb install
でインストール

RubyGemsから
rubygems-1.8.5.zip
をダウンロードして適当なディレクトリへ解凍
cmd.exeなどで解凍したディレクトリへ移動
ruby setup.rb
でインストール

gem install rails
で、Rails3.0.8をインストール

gem install mysql2 -v 0.2.6
で、mysql2アダプタをインストール
※0.2.7以降だとエラーになるので0.2.6を使う
You've installed the binary version of mysql2.
It was built using MySQL Connector/C version 6.0.2.
It's recommended to use the exact same version to avoid potential issues.

At the time of building this gem, the necessary DLL files where available
in the following download:

http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip/from/pick

And put lib\libmysql.dll file in your Ruby bin directory, for example C:\Ruby\bin
とメッセージが出るので、素直に従う
このgem作った時は必要なDLLファイルは次のダウンロードにあったよ!
lib\libmysql.dllをC:\Ruby\binとかに入れてね!
ってことだけど、URLは無効なようなので
http://dev.mysql.com/downloads/connector/c/6.0.html
へ行って
mysql-connector-c-noinstall-6.0.2-win32.zip
をダウンロードしましょう
あとは展開して、Rubyをインストールしたディレクトリのbin配下へコピーすればOK

そして、早速アプリケーションの作成
rails new app1 -d mysql
作成したディレクトリの中のGemfileを編集する
gem 'mysql2', '~> 0.2.6'
を削除して、次を追加
gem 'mysql2', '0.2.6'
gem 'rake' , ' 0.8.7'

config/database.yml
にmysqlのユーザーとパスワードをセット
※ユーザー名:root パスワード空欄の状態でrakeを実行するとルートのパスワードが変更されてmysqlに接続できなくなったので注意!!

あとは、関連モジュールのインストールとscaffoldで雛型の作成、DBの作成、サーバーの起動
bundle install
rails g scaffold task name:string memo:string
rake db:create
rake db:migrate
rails s

あとは
http://localhost:3000/tasks
にアクセスすればアプリケーションにアクセスできますよヾ(*・∀・)ノ"



チラシの裏:試行錯誤してる途中で出会ったエラーあれこれ(´・ω・‘)
Please install the mysql2 adapter: `gem install activerecord-mysql2-adapter` (no such file to load -- active_record/connection_adapters/mysql2_adapter)

collect2: ld returned 1 exit status
make: *** [mysql2.so] Error 1

uninitialized constant Rake::DSL