RubyってSubversionで開発してるというイメージしか無かったのですが、GitHubでも最新のソースコードをCloneできました。
git clone https://github.com/ruby/ruby.git
公式にリポジトリガイドなるページがあるので、最新のRubyのソースコードを読んでみたい人は参考にしたらいいと思います。
a = a.reverseとすれば、インスタンス"cba"が作られ、aにそのラベルが入る。
WEBrickを使って、RubyCGIをローカル上でプレビューする方法を紹介します。前にTwinCalを作った時にこの方法を覚えました。
ApacheはC言語で書かれていているためにパフォーマンスが良いので本番環境ではApacheを採用しましたが、 ローカルでテスト用に使うにはWEBrickでちょろっとサーバを立てるのが良いですよね、そうしましょう。
テスト環境(ローカル) :WEBrick
本番環境(サーバ) :Apache
あとは、rsyncとかでファイルを同期できるようにしたら完璧。
Rubyのパスを本番環境とテスト環境で統一するために、
/usr/bin/ruby
のシンボリックリンクをrvmなどで入れたRubyに置き換えます。
mv /usr/bin/ruby /usr/bin/ruby-original
ln -s /Users/gam0022/.rvm/rubies/ruby-1.9.3-p194/bin/ruby /usr/bin/ruby
本番環境とテスト環境の両方で行います。
当然ですが、RubyのCGIではこのパスを1行目に指定します。
WEBrickについて簡単に説明すると、RubyでWEBサーバを立てるためのライブラリです。 これをrequireすることで、10行くらいのコードを書くだけで簡易WEBサーバが完成します。
私の場合、次のようなpreview.rb
を書きました。
WEBrickで.rbをAddHandlerする方法がなかなかわからなくて苦労しました。
require 'webrick'
include WEBrick
module WEBrick::HTTPServlet
FileHandler.add_handler('rb', CGIHandler)
end
s = HTTPServer.new(
:Port => 3000,
:DocumentRoot => File.join(Dir.pwd),
:DirectoryIndex => ['index.rb']
)
trap("INT") { s.shutdown }
s.start
このpreview.rb
を公開したいディレクトリに設置し、
ターミナルでruby preview.rb
をすれば、ブラウザでlocalhost:3000
にアクセスすることで、
簡単にローカル上でCGIをテストすることができます。
ApacheではURIの上限が大きいので、かなり長いURIを発行しても問題がないのですが、WEBrickでは2083byteの制限があるので、 CGIで長いURIを発行すると、RequestURITooLargeというエラーになってしまうことがあります。
これは、WEBrickのソースコードを書き換えることで対処できます。
私の環境では、/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httprequest.rb
のL293に、
MAX_URI_LENGTH
という定数があったので、これを書き換えることで対処できました。
291 private
292
293 MAX_URI_LENGTH = 20830#2083 # :nodoc:
294
295 def read_request_line(socket)
Rubyで何かWebアプリを作ってみたかったので、 Twinsに登録した時間割をGoogleカレンダーやiCalにインポートするWebサービス「TwinCal」を作ってみました。
筑波大学生以外にも分かるように説明すると、筑波大学にはTwinsという履修の登録をするWebのシステムがあり、 Twinsでは時間割をCSV出力する機能があるので、そのCSVをiCalender形式に変換して、 GoogleカレンダーやiCalにインポートをサポートするWebアプリを作りました。
来年、Twinsが改修されるらしいので、半年後には使えなくなると思います。
バイトでPHPを使ってWebアプリを開発した経験はありましたが、個人でWebアプリを作ったのは初めてでした。
気を使ったこととして、ビューの部分はerb(railsでも使われているアレ)を使い、MVCを意識して作りました。
最近流行りのbootstrapやjQueryなどを使ったのですが、この2つを使ったのは正解でした。 これらのおかげでロジック部分に集中することができ、かなりサクサク作業することができました。
このアプリを作ろうと思い立ったのは12日で、14日には公開できるような状態になりました。
あまり使ってくれている人はいないようですが、bootstrapとhtml5で遊べたことだけでもよい経験となりました。
今回のことで学んだテクニックがいくつかあるので、後ほど記事にしたいです。
Ruby 1.9を使ってアスキーコードを取得する方法です。 次のように、bytesメソッドを使えばいいです。
# Ruby1.9
"ABC".bytes.to_a # => [65, 66, 67]
なお、上記のコードはRuby1.8では動きません。
Ruby1.8でアスキーコードが欲しい場合、[]で取得できますが、 あまりこの動作は美しくないですよね。
# Ruby1.8
?A # => 65
"A"[0] # => 65
ServersMan@VPS(Ubuntu)でRubyのCGIを実行するまでのメモです。
apt-getかaptitudeでインストールすればいいと思います。
sudo aptitude install apache2
/etc/apache2/mods-enabled/mime.conf
にAddHandlerを設定します。
#AddHandler cgi-script .cgi
という行があるので、
見つけてコメントアウトを解除して、次のように書き換えればいいと思います。
AddHandler cgi-script .cgi .rb
/etc/apache2/sites-available/default
でOptions +ExecCGIを設定します。
<Directory /var/www/html/>
#Options Indexes FollowSymLinks MultiViews
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride None
Order allow,deny
allow from all
</Directory>
上の2つのファイルを編集したら、apacheを再起動して設定を反映させます。
sudo /etc/init.d/apache2 restart
cd /var/www/html
chmod 755 test.rb
これでたぶん動くようになります。
ね?簡単でしょ?
/var/log/apache2/error.log
のエラーメッセージを見ましょう。