mongrel_clusterにしました
このブログシステムは長いことapache2/pa
しばらく様子見です。
このブログシステムは長いことapache2/pa
しばらく様子見です。
しばらく前から安定性が悪くなってきたのですが、ここに来て頻繁にPassengerのプロセスが暴走するようになってきました。
プログラムやシステム構成はここしばらくほとんど変えておらず、トラフィックも大きな変動はないので、うわさのEC2のサービス劣化の影響でしょうか。
しばらくGemを作ってなかったので気がつかなかったのですが、 Gem作りを取り巻く環境が結構変わっているようですね。
まず、newgemやcutagem, hoeのようにgemのひな形を作ってくれる jeweler というtoolが結構使われているようです。これはgithubにインテグレートされていて非常に便利です。
githubはちょっと前からgemをホストするgemリポジトリサービスをやめてしまったようで、代わりに Gemcutterを使うようになっています。 jewelerを使う事で、gemcutterやrubyforgeにgemをpushする事ができます。
たまにRubyforgeが落ちていてgem installする事ができなくなっている場合がありますが、そんな場合には以下のミラーサーバが利用できるかもしれません。
ローカルにダウンロードしてから sudo gem install します。
GAEなどでファイル数の多いライブラリを使うために、gemのパッケージから不要そうなファイルを消してjarファイルにまとめるために作ったスクリプトです。
1 #!/usr/bin/env ruby 2 3 def run(command) 4 puts command 5 system command 6 end 7 8 case ARGV[0] 9 when 'install' 10 run "jgem install -i ./gems --no-ri --no-rdoc #{ARGV[1]}" 11 when 'uninstall' 12 run "jgem uninstall -i ./gems #{ARGV[1]}" 13 end 14 15 Dir['gems/gems/ *'].each do |dir| 16 %w( 17 Generaters TODO README.* README 18 spec/**/* test/**/* examples/**/* tasks/**/* 19 tutorial/**/* demo/**/* website/**/* 20 CHANGES CHANGES.tx t CHANGELOG 21 LICENSE MIT-LICENS E Rakefile CONTRIBUTO RS 22 Manifest.t xt History.tx t install.rb setup.rb 23 ).each do |pattern| 24 Dir[File.join(dir, pattern)].each do |path| 25 run "rm -rf #{path}" 26 end 27 end 28 end 29 30 Dir['gems/cache ', 'gems/bin', 'gems/doc'].each do |path| 31 run "rm -rf #{path}" 32 end 33 34 run "jar cf lib/merb.j ar -C ./gems ."
Rub はHaml的なEndless Rubyを気軽にはじめるために作ったGemです。 GitHubをsourceに追加して以下のようにインストールできます。
1 % sudo gem install genki-rub
ソースコード を見るとわかりますが、非常に短いので現時点では、if文の複数行にまたがる条件文などには対応していません。気が向けばそのうち対応するかもしれません。
Rubを使ってSinatraアプリを作るには以下のようにします。
config.ru
1 require "rubygems" 2 require "rub" 3 rub "app.rb" 4 run Sinatra::Application
app.rb
1 require "sinatra" 2 require "dm-core" 3 require "haml" 4 5 DataMapper::setup(:default, ENV['DATABASE_U RL'] || 'sqlite3:// db.sqlite3 ') 6 7 class Post 8 include DataMapper ::Resource 9 property :id, Serial 10 property :content, Text 11 auto_upgra de! 12 13 get "/" do 14 @posts = Post.all(:order => [:id.desc]) 15 haml :index 16 17 post "/" do 18 Post.create(params) 19 redirect "/" 20 21 __END__ 22 @@ index 23 %h1 Hello, Sinatra! 24 %ul 25 - @posts.each do |post| 26 %li= post.conte nt 27 %form{:method => :post} 28 %textarea{:name => :content} 29 %input{:type => :submit, :value => "Post"}
面白い点として、 Endless RubyでもVimやこのブログのSyntaxハイライトはちゃんと機能してくれます(Emacs使いのレポート求む)
必要なファイルはこれだけです。あとはおもむろにshotgunしましょう。
1 % shotgun 2 == Shotgun starting Rack::Handler::Mongr el on localhost: 9393
あとはhttp://loc
shotgunは
1 % sudo gem install shotgun
でインストールできます。
Gemを作るのが面倒になってきたので、githubから直接requireできたら楽になるかもしれないと思い、試してみました。
1 def git(uri, sha1, options = {}) 2 require "tmpdir" 3 basename = File.basename(uri) 4 outdir = File.join(Dir.tmpdir, basename, sha1) 5 unless File.exist?(outdir) 6 sh = proc{|command| IO.popen("#{command} 2>&1"){|io| io.read}} 7 sh["git clone #{uri} #{outdir}"] 8 sh["cd #{outdir}; git checkout #{sha1}"] 9 end 10 $:.unshift File.join(outdir, 'lib') 11 require options[:require_as] || basename.split(/\.git$/)[0] 12 end
Dir.tmpdir
意外と普通にgemの代わりに使える感じです。
HAMLを使うようになってから、endの無いrubyが欲しい今日この頃。 あわや自作する直前、先人の仕事を見つけました。
endless.rb
is a pre-proces sor for ruby which allows you to use python-ish indentatio n to delimit scopes, instead of having to type 'end' every time.
良いですね。残念ながら、現時点ではrubylexerのrequireでエラーが出るようですが、一定の制約付きでもかまわないので動くようになるとありがたいです。 JRubyのCharles Nutterも割と 肯定的なコメント を寄せていますね。
Oh dear god no!
Seriously though...n
eat :) -- Charlie
JRubyのオプションに--endlessがつく?
RGB値と三刺激値(tristimulu
1 def xyz2rgb(x, y, z) 2 r = 3.240479 * x - 1.53715 * y - 0.498535 * z; 3 g = -0.969256 * x + 1.875991 * y + 0.041556 * z; 4 b = 0.055648 * x - 0.204043 * y + 1.057311 * z; 5 [r, g, b] 6 end 7 8 def rgb2xyz(r, g, b) 9 x = 0.412453 * r + 0.35758 * g + 0.180423 * b; 10 y = 0.212671 * r + 0.71516 * g + 0.072169 * b; 11 z = 0.019334 * r + 0.119193 * g + 0.950227 * b; 12 [x, y, z] 13 end
RubyGemsを使うときに、たびたびGemのバージョンを指定する機会があります。 '=', '>=', '>' などの等号、不等号は、対応するRubyのオペレータと同じような機能なのでわかりやすいのですが、'~>'についてはどういう意味なのか若干わかりにくい感じです。一応マニュアルにはこんな感じに書かれています。
'~>' は、悲観的(pessimisti