2011年3月23日水曜日

ruby+webrickで、html内の入力フォームデータをDBに書きこむ

htmlのフォームから飛ばしたデータをrubyで処理する方法を紹介。
簡易的なサービスを想定しているので、
WEBrick+SQlite3を使用。
SQliteはdbiライブラリで扱っている。

【index.html】
# ヘッダー等は割愛
<form action="entry">
<input type="text" name="name">
<input type="submit" value=" 送信 ">
</form>

【server.rb】
#! /usr/local/bin/ruby -Ks
# -*- encoding: UTF-8 -*-

require 'rubygems'
require 'webrick'
require 'erb'
require 'dbi'

config = {
:port => 8099,
:DocumentRoot => '.'
}

server = WEBrick::HTTPServer.new( config )

server.mount_proc("/entry") { |req, res|
dbh = DBI.connect( 'DBI:SQlite3:test.db' )
dbh.do("insert into date
values('#{req.query['name']}');")
dbh.disconnect

template = ERB.new( File.read('entried.html') )
res.body << template.result( binding )
}

trap(:INT) do
server.shutdown
end

server.start

【entried.html】
登録完了

action名と同じ名前をmount_porcでしてあげると、それ以下の処理をしてくれる。
その際templateで返答するデータを決めているので、html形式で返す(erbなどでもOK)
trapはControl+cでサーバを停止させる仕組み。

ちなみに
WEBrick::HTMLServlet::FileHandler.add_handler("erb", WEBrick::HTTPServlet::ERBHandler)
とserver = WEBrick::HTTPServer.new( config )の下あたりにでも追記すると、拡張子erbを処理済みのファイルとして扱えるようになる。

セキュリティレベルは推して知るべし。

2011年3月13日日曜日

Ruby on railsでacts_as_taggableの導入にはまった話

通常通りacts_as_taggableを入れると
acts_as_taggable_on_steroids has been moved to github: http://github.com/jviney/acts_as_taggable_on_steroids
とエラー表示が出る。

なので、プロジェクトフォルダに移動して、
# ruby script/plugin install http://github.com/jviney/acts_as_taggable_on_steroids
もしすでにインストールされてるよ!と怒られたら、一度アンインストールするか、もしくは
# ruby script/plugin install http://github.com/jviney/acts_as_taggable_on_steroids --force
で、OK

Ruby on railsでfile_columnの導入にはまった話

uninitialized constant FileColumn::ClassMethods::Inflector
という表示がされて動かない。

plugins/file_column/lib/file_column.rb

my_options = FileColumn::init_options(options,
Inflector.underscore(self.name).to_s,
attr.to_s)

my_options = FileColumn::init_options(options,
self.name.to_s.underscore,
attr.to_s)

に書き換えれば動くらしい。

参考:
http://d.hatena.ne.jp/aki-s-119/20081201/1228168584

Ruby on railsでrestful_authenticationの導入にはまった話

現時点で、techno-weenie.netからrestful_authenticationプラグインを入れることができない。
代わりにgemとして用意されている。

# gem install restful_authentication

それにともない、machinistと、fakerが必要になる。
# gem install machinest
# gem install faker
# gem install aasm

で、enviroment.rbに以下を追記
config.gem "restful_authentication", :version => ">= 1.1.6"
config.gem "aasm", :version => ">= 2.1.5"
config.gem "faker"
config.gem "machinist"

で、マイグレーションをして、完了。

Ruby on railsでgettextの導入にはまった話。

Rails of ruby on railsを参考に導入したらはまった。
どうやらgettextのバージョンが変わって、呼び出すときに
gettext/railsでは呼び出せなくなっていて、
代わりにgettext_railsが独立したgemとして用意されるようになったみたい。

だから
# gem install gettext_rails
をする必要がある。

また設定も、enviroment.rbに

Rails::Initializer.run do |config|
……

config.gem "locale_rails"
config.gem "gettext_activerecord"
config.gem "gettext"
config.gem "gettext_rails"
……
end
の記述が必要となった。

さらにgettext_railsにはバグがあり、
i18.rb内のLocale.xxx(いろんな関数)のすべての部分を::Local.xxxに書き換え擦る必要がある。

2011年3月6日日曜日

ruby on railsのユーザー認証「restful_authentication」導入まで

# gem install restful_authentication
# gem install machinst
# gem install faker
# gem install aasm

で、構成のenviroment.rbファイルのendのうえあたりに
config.gem "restful_authentication", :version => ">= 1.1.6"
config.gem "aasm", :version => ">= 2.1.5"
config.gem "faker"
config.gem "machinist"
を追加。

2011年3月5日土曜日

正規表現チェック

このサイトを使うと正規表現をチェックしながらかけるので、かなり便利。
http://www.rubular.com/

serversmanで再起動できないときの対処法

普通にログインしようとすると、
PTY allocation request failed on channel 0
と表示が出て、ログインできなかった。

原因を調べると、 Airdisplayでログアウトしてなかったのが、すべてプロセスとして残って、そのせいでSSHのログイン上限数を超えてしまったかららしい。

MyDTIからサーバーを再起動して、ログイン出来る状態にした。

2011年3月3日木曜日

serversmanでrubyのtwitter_oauthを入れるまで

管理者ユーザの作成
# useradd user
# passwd user

パスワードを2回入力

sudoの許可
# visudo
「# %wheel ALL=(ALL) ALL」の#を削除

作ったユーザを管理者IDとして設定
# usermod -G wheel user

動くか試す。
# ssh user@xxx.xxx.xxx.xxx
# su

うごいたら
# cd
# sudo vi /etc/ssh/sshd_config

で、「# PermitRootLogin yes」の下に
「PermitRootLogin no」を追加。

設定はこれで終了なので再起動
# sudo /etc/rc.d/init.d/sshd restart

rootでログイン出来ないことを確認。

で、必要そうなパッケージのインストール
# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
# rpm -Uhv rpmforge-release-0.5.2-2.el5.rf.i386.rpm
#yum update
#yum -y install apt
# apt-get update

rubyのインストール
# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p72.tar.gz
# tar zxvf ruby-1.8.7-p72.tar.gz
# cd ruby-1.8.7-p72
# ./configure --prefix=/usr
# make && make install

rubygemsのインストール
# wget 'http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz'
# tar -zxvf rubygems-1.3.5.tgz
# cd rubygems-1.3.5
# ruby setup.rb

zlibのインストール
# yum install zlib-devel
# ruby extconf.rb --with-zlib-include=/usr/include -with-zlib-lib=/usr/lib
# make && make install

OpenSSLのインストール
# yum install openssl-devel
# cd ruby-1.8.7-p249/ext/openssl
# ruby extconf.rb --with-openssl-dir=/usr/local/ssl
# make && make install

最後にtwitter_oauthのインストール
# gem install twitter_oauth

もしかしたら何か足りないかも。

2011年3月2日水曜日

Serversman設定リセット

serversmanの設定をリセット。
なんどもやり直せるってすてき☆

やり方は、MyDTIにログイン後、「契約中サービス」>「各種初期化」でできる。

その後Macないに以前のRSAキーが残っているので、
# cd ~/.ssh
# ls -al
# rm known_hosts

でOK、前と同じように接続できるようになる。

serversmanにruby環境を構築する

ServersmanのVPSを借りた。

いろいろはまったけど、無事ruby1.8をインストールできたので、そのメモ

ターミナルの[シェル]>[新規リモート接続]>[ssh]を選択
ユーザー欄にはユーザー名
下の欄「〇〇.〇〇.〇〇.〇〇 -p ポート番号」を入れる。
デフォルトではポート番号22で接続するようになっているが、serversmanでは別に設定してあるので 「-p ポート番号」で指定してあげる必要がある。

その後パスワードを入力すれば、接続完了。


そのまま入れるとrubyをいれるとバージョンが古いのでサーバーからダウンロードして入れる。

まずはコンパイラのインストール
# yum install gcc


その後は、
# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p72.tar.gz
# tar zxvf ruby-1.8.7-p72.tar.gz
# cd ruby-1.8.7-p72
# ./configure --prefix=/usr
# make && make install

で完了。

checkinstallを使う方法があるらしいのだけど、うまくインストールできなかった。

rubygemsも同じ感じで
# wget http://rubyforge.org/frs/download.php/43985/rubygems-1.3.0.tgz
# tar zxvf rubygems-1.3.0.tgz
# cd rubygems-1.3.0
# ruby setup.rb