2012年4月27日金曜日

MD5の作成

picasaにあるようなプライベート設定の認証キーにMD5を使う場合、
RubyからMD5キーを生成してみました。

irbで実行するとこんな感じ。
> require 'digest/md5'
=> true
> Digest::MD5.hexdigest("aa")
=> "4124bc0a9335c27f086f24ba207a4912"
> Digest::MD5.hexdigest("AA")
=> "3b98e2dffc6cb06a89dcb0d5c60a0206"

大文字小文字で違うキーが生成されます。

MD5のreverse用の辞書も存在するので、そこでマッチしない言葉を選びましょう!
http://md5.rednoize.com/

2012年4月20日金曜日

Sinatraをapacheで動かす

sinatraをapacheで動かしてみましょう。
Apacheが入ってることが前提で、passenger のインストールを行います。
先に作成した config.ru が必要になります。

下記を参考にしました!ありがとうございます!
http://d.hatena.ne.jp/foosin/20090619/1245426335

passengerのインストール
2つのモジュールが必要です。
1つ目はあっという間。
$ gem install passenger
Fetching: fastthread-1.0.7.gem (100%)
Building native extensions.  This could take a while...
Fetching: daemon_controller-1.0.0.gem (100%)
Fetching: passenger-3.0.12.gem (100%)
Successfully installed fastthread-1.0.7
Successfully installed daemon_controller-1.0.0
Successfully installed passenger-3.0.12
3 gems installed
Installing ri documentation for fastthread-1.0.7...
Installing ri documentation for daemon_controller-1.0.0...
Installing ri documentation for passenger-3.0.12...
Installing RDoc documentation for fastthread-1.0.7...
Installing RDoc documentation for daemon_controller-1.0.0...
Installing RDoc documentation for passenger-3.0.12...

2つ目はちょっと長いです。
$ passenger-install-apache2-module
Welcome to the Phusion Passenger Apache 2 module installer, v3.0.12.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.

Press Enter to continue, or Ctrl-C to abort.
ここではとりあえずEnter押下。
しばし待つと
 1. The Apache 2 module will be installed for you.
が終わって、
 2. You'll learn how to configure Apache.

の説明が表示されます。

下記3行は環境によって異なりますので、メモしておきます。
あとで必要になります。
Load xxxxx
PassengerRoot xxxxx
PassengerRuby xxxxx

--------------------------------------------
The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /home/tiffany/.rvm/gems/ruby-1.9.2-p290@rails3/gems/passenger-3.0.12/ext/apache2/mod_passenger.so
   PassengerRoot /home/tiffany/.rvm/gems/ruby-1.9.2-p290@rails3/gems/passenger-3.0.12
   PassengerRuby /home/tiffany/.rvm/wrappers/ruby-1.9.2-p290@rails3/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Press ENTER to continue.
無事インストールされたようなのでEnter押下。
最後に
 3. You'll learn how to deploy a Ruby on Rails application.

で、こういうメッセージが表示されます。
--------------------------------------------
Deploying a Ruby on Rails application: an example

Suppose you have a Rails application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:

   <VirtualHost *:80>
      ServerName www.yourhost.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /somewhere/public   
      <Directory /somewhere/public>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
      </Directory>
   </VirtualHost>

And that's it! You may also want to check the Users Guide for security and
optimization tips, troubleshooting and other useful information:

  /home/tiffany/.rvm/gems/ruby-1.9.2-p290@rails3/gems/passenger-3.0.12/doc/Users guide Apache.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
http://www.modrails.com/

Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.


Passengerのインストールはこれで終了です。


apacheの設定
環境によって異なると思いますが、、下記のファイルに上記3を参考に設定を行います。
$ sudo vi /etc/apache2/sites-available/xxx
そのファイルに下記を追加します。
上記でメモした3行

   LoadModule passenger_module /home/tiffany/.rvm/gems/ruby-1.9.2-p290@rails3/gems/passenger-3.0.12/ext/apache2/mod_passenger.so
   PassengerRoot /home/tiffany/.rvm/gems/ruby-1.9.2-p290@rails3/gems/passenger-3.0.12
   PassengerRuby /home/tiffany/.rvm/wrappers/ruby-1.9.2-p290@rails3/ruby
モジュールのパス設定
<VirtualHost *:80>
    ServerName www.yourhost.com
    DocumentRoot /home/tiffany/sinatra/public
    <Directory  /home/tiffany/sinatra/public>
        AllowOverride all
        Options -MultiViews
    </Directory>

     ErrorLog /var/log/apache2/error.log
     CustomLog /var/log/apache2/access.log combined
</VirtualHost>

これで、apacheを再起動すればOK!
RACK_ENV=productionでアプリが起動します。
もし、development環境でapache を動かしたい場合は、下記のようにRackEnv development をapacheの設定ファイルに追加してください。
    DocumentRoot /home/tiffany/sinatra/public
    RackEnv development

Sinatraをconfig.ruで起動

config.ruに下記を書くだけで動きます。

例えば、myqpp.rb のアプリを動かしたい場合
config.ru を myapp.rb と同じ階層に配置します。

#  config.ru
require "./myapp.rb"
run Sinatra::Application

require "./myapp.rb"
の記載は、下記のように書いてもOK
require File.dirname( __FILE__ ) + "/myapp.rb"

起動コマンドは
$ rackup config.ru
[2012-04-20 15:51:07] INFO  WEBrick 1.3.1
[2012-04-20 15:51:07] INFO  ruby 1.9.2 (2011-07-09) [x86_64-linux]
[2012-04-20 15:51:07] INFO  WEBrick::HTTPServer#start: pid=27704 port=9292

port は 9292 になります。
ruby myapp.rb の port 4567と同じ動きです。

productionモードで動かす場合は下記のコマンドになります。
RACK_ENV=production rackup config.ru

Sinatraのルートの最後のスラッシュ

ルートの最後にスラッシュがあってもなくても動くようにしたい場合は、
最後に「/?」をつければ良いです。
http://www.sinatrarb.com/faq.html#slash


例えば、下記のどちらでも動かせるようにしたい場合、
スラッシュなし
get '/hello' do
  "Hello"
end
スラッシュあり
get '/hello/' do
  "Hello"
end

こんなふうに書くだけでどちらにもマッチします!
get '/hello/?' do
  "Hello"
end

2012年4月19日木曜日

Sinatraの環境切り替え

config.ymlといった定義ファイルをdevelopmentモードとproductionモードといったモードで切り替えを行う方法です。

http://www.sinatrarb.com/contrib/config_file.html


下記2行を追加すれば、railsのようにproduction/developmentの記載できます。
require "sinatra/config_file"
config_file 'path/to/config.yml
例えば、こんなconfig.ymlがあったとします。
production:
  server: sinatra_production
  port: 5555
development:
  server: sinatra_dev
  port: 5555
test:
  server: sinatra_test
  port: 5555
settings.serversettings.port でそれぞれのモードに応じた値が取得できます。
settingsはお決まりの用語です。

なお、上記のymlでも下記のymlでも同じ結果になります。
server:
  production: sinatra_production
  development: sinatra_dev
  test: sinatra_test

port: 5555

どちらの記載が良いのかは、定義ファイルの書く内容次第ですね。