2012年4月27日金曜日

[ruby]最初に知っておけば良かったbundlerの使い方 sinatra編

rails編は以前書いたのでsinatraでやってみる
用途としてはDBとかいらないスタティックなサイトの構築で、でもhtml、css、jsを生で書くのとか耐えられない。phpはマジ勘弁みたいなときにこうしてますよって感じのことを書きます。

(bundlerの使い方ってゆうかrubyでのweb制作全般って感じですね…)

まず適当な場所にプロジェクトのディレクトリを作ります。
hogeとかもアレなんでポートフォリオにしときます。

$ cd ~/Web
$ mkdir portfolio
$ cd portfolio

でプロジェクトのルートでGemfileをつくる

$ bundle init
Writing new Gemfile to /Users/kozo/Web/portfolio/Gemfile

中身はこんな感じだから...

$ vim Gemfile
# A sample Gemfile
source "https://rubygems.org"

# gem "rails"

以下に書き換えます

source "https://rubygems.org"

gem "sinatra"
gem "sass"
gem "haml"
gem "coffee-script"
gem "shotgun"

自分はnode.jsを入れてるんでアレですが、環境によってはjavascript実行環境が無いと怒られるかもしれないんで、そんときは以下のgemを足してみてください。

gem 'therubyracer'

でgemをインストールします。

bundle install --path vendor/bundle --without production

Fetching gem metadata from https://rubygems.org/.....
Installing coffee-script-source (1.3.1) 
Installing multi_json (1.3.2) 
Installing execjs (1.3.0) 
Installing coffee-script (2.2.0) 
Installing haml (3.1.4) 
Installing rack (1.4.1) 
Installing rack-protection (1.2.0) 
Installing sass (3.1.16) 
Installing tilt (1.3.3) 
Installing sinatra (1.3.2)
....

よしこれでgemが揃いました。
さらに作業環境を整えます。

sinatraを動かすアプリが必要なので app.rb と config.ru
sassやhamlを入れておくviewsディレクトリ、
ドキュメントルートになるpublicディレクトリをつくります。

$ touch app.rb
$ touch config.ru
$ mkdir views
$ mkdir public

アプリケーションのコードはこんな感じです

$ vim app.rb
require "sinatra/base"
require "sass"
require "haml"
require "coffee-script"

module Portfolio
  class App < Sinatra::Base
    get '/' do
      'hello'
    end
  end
end
$ vim config.ru
require "./app"
run Portfolio::App

でアプリがちゃんと動くかどうか確認してみる
shotgunを入れておいたので

$ bundle exec shotgun
== Shotgun/WEBrick on http://127.0.0.1:9393/
[2012-04-26 23:49:20] INFO  WEBrick 1.3.1
[2012-04-26 23:49:20] INFO  ruby 1.9.2 (2011-07-09) [x86_64-darwin11.2.0]
[2012-04-26 23:49:20] INFO  WEBrick::HTTPServer#start: pid=457 port=9393

localhost:9393にアクセスして hello が表示されればOKです
そしたらこっからガシガシコード書いていくんですが、shotgun使ってるのでapp.rbを編集してもサーバの再起動が必要ありません。
home、about、galleryの3ページと仮定して以下のように書き換えました

$ vim app.rb
module Portfolio
  class App < Sinatra::Base
    before do
      @site_name = 'My Portfolio'
      @nav = ['home', 'about', 'gallery']
    end
    
    get '/' do
      haml :index
    end

    get '/about/?' do
      haml :about
    end

    get '/gallery' do
      haml :gallery
    end
  end
end

before do ... end の中で共通の処理を記述できます。
site_nameとnavを用意しておきました。変数に@をつけておくとインスタンス変数と言ってviewに渡せるようになります。
htmlはhamlで書くので以下のようにします。

$ vim views/index.haml
%h1= @site_name
%nav
  %ul
    - @nav.each do |n|
      %li
        %a{href:"/#{n}"}= n
%p welcome to my portfolio site

でもこれだとheadとかないので layout を作成します

$ vim views/layout.haml
!!! 5
%html
  %head
    %meta{charset:'utf-8'}
      %title= @site_name
  %body
    = yield

yieldの部分に各ページの内容が入ります。
次はsassというかscssを使ってみます。
まずはapp.rbを編集して、

$ vim app.rb
get '/stylesheets/base.css' do
  scss :base
end

galleryの下に追記しておきました。
ここまで出来たら後はviews内にscssファイルを作って作業していくだけです。
簡単ですね!

ちなみにrubyのシンボル(:で始まる文字列)は " で囲めば / とかも使えるので
views内でファイルが平置きになってるのが嫌な人は views/haml や views/scss を作っておいて
app.rbで

haml :"haml/index"

と指定すればちゃんと呼び出せますよ!

sinatraとかhamlとかscssとかcoffeescriptの詳しい使い方はドキュメントを読もー

2012年4月19日木曜日

トマト栽培

今朝は芽が3つになってました!


しかも結構な成長速度。昨日よりかなり成長してる気がするなぁ。

日付
2012.04.19
気温
17℃
天気
曇り
2012年4月18日水曜日

トマト栽培

やっと芽が出ました!


なんの変化もないプランターを写真撮り続けるのは、マジで精神的にきついなと思ってたんでしばらくお休みしてましたが、やってくれましたよ〜。
植物を育てるってこんなに嬉しいんですね。芽が出た後の育て方も調べよう。

日付
2012.04.18
気温
19.9℃
天気
晴れ

分かりづらいけど、左右二ヶ所に芽がでた…!

2012年4月16日月曜日

OS X lion にhomebrewでnginxとphpをインストールした

まずはnginxのインストール。

$ brew options nginx
nginx
--with-passenger
 Compile with support for Phusion Passenger module
--with-webdav
 Compile with support for WebDAV module

今回はどちらもいらないので普通に brew install nginx で設定をいじる。

$ cd /usr/local/etc/nginx
$ vim nginx.conf
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    include /usr/local/etc/nginx/sites-enabled/*;
}
こうしておいた
$ mkdir sites-enable
$ mkdir sites-available

このディレクトリ必要なの?って思ったけど、シンボリックリンクの作成/削除で複数ファイルの管理ができるよってことなんですね。なんかかっこいいですね。

で、availableの方に…

$ vim sites-available/localhost
server {
    listen 8080;
    server_name localhost;
    root /Users/kozo/Web/nginx/localhost/public;

    access_log  /Users/kozo/Web/nginx/localhost/logs/access.log;
    error_log  /Users/kozo/Web/nginx/localhost/logs/error.log warn;

    location / {
        index index.html index.htm index.php;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}

とした。

続いてphpのインストール。

$ brew options https://raw.github.com/ampt/homebrew/php/Library/Formula/php.rb
php
--with-mysql
 Include MySQL support
--with-pgsql
 Include PostgreSQL support
--with-mssql
 Include MSSQL-DB support
--with-fpm
 Enable building of the fpm SAPI executable
--with-apache
 Build shared Apache 2.0 Handler module
--with-intl
 Include intl extension
--with-readline
 Include readline extension

適当にオプション付けて

$ brew install https://raw.github.com/ampt/homebrew/php/Library/Formula/php.rb --with-mysql --with-pgsql  --with-fpm --with-intl --with-readline

そしたらエラー!
ココでも見てなんとかしろや的なこと言われたので見てみる
https://github.com/mxcl/homebrew/wiki/checklist-before-filing-a-new-issue

brew updateか。

$ brew update

またエラー。というかgitのリポジトリでconflict的なことが起きてるのかな?

$ cd /usr/local/
$ git fetch origin/master
$ git reset --hard origin/master
$ brew update
Already up-to-date.

OK! phpのインストール出来ました。 このままだとcliがMacにプリインストールされてる方を見ちゃうので

$ vim ~/.bash_profile
$ export PATH="$(brew --prefix)/bin:$PATH" 

上記を追加しました。

$ php -v
PHP 5.3.10 (cli) (built: Apr 16 2012 17:15:01) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
    with Xdebug v2.1.2, Copyright (c) 2002-2011, by Derick Rethans

よし。で、fpmの起動用plist作成

$ vim ~/Library/LaunchAgents/php-fpm.plist
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd" >
<plist version='1'>
  <dict>
    <key>Label</key><string>org.php.php-fpm</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/sbin/php-fpm</string>
      <string>--fpm-config</string>
      <string>/usr/local/Cellar/php/5.3.10/etc/php-fpm.conf</string>
    </array>
    <key>Debug</key><false/>
    <key>RunAtLoad</key><true/>
    <key>KeepAlive</key><false/>
    <key>UserName</key><string>kozo</string>
  </dict>
</plist>

※.plistの拡張子付けないと後のlaunchctl loadで怒られました

php-fpm起動!

$ launchctl load -w ~/Library/LaunchAgents/php-fpm.plist

最終確認

$ cd ~/Web/nginx/localhost/public/
$ vim index.php
<?php echo 'Hello' ?>

と書いて http://localhost:8080/ を開いて Hello でました! 思ってたより簡単だったけどちょっと戸惑った。

参考にしたサイト

  • http://aoyagikouhei.blog8.fc2.com/blog-entry-195.html
  • http://d.hatena.ne.jp/YuhoYo/20110528/1306547056
  • http://labs.uechoco.com/blog/2011/12/php-homebrew-how-to-compile-intl-enabled-php.html
  • http://www26.atwiki.jp/nginx/pages/13.html
  • http://www.1x1.jp/blog/2011/05/yum_install_nginx_php-fpm.html

※追記 2012/04/17

再起動はこうすればいいらしい:

$ sudo nginx -s stop && sudo nginx
2012年4月13日金曜日

トマト栽培

日付
2012.04.13
気温
21℃
天気
晴後曇

変化なし

2012年4月12日木曜日

トマト栽培

日付
2012.04.12
気温
23℃
天気
晴れ

全く変化なし

2012年4月11日水曜日

トマト栽培

日付
2012.04.11
気温
18℃
天気
曇り

変化なし

2012年4月10日火曜日

トマト栽培

日付
2012.04.10
気温
19℃
天気
晴れ
2012年4月9日月曜日

トマト栽培

日付
2012.04.9
気温
23℃
天気
晴れ

特に変化なし。

2012年4月8日日曜日

トマトの栽培をしてみることにした

自分にはテック系の記事は書けない(&続かない)ことがわかったし、一人暮らしが2年目に入って、寂しさを紛らわす意味もあってトマトの栽培を始めることにしたから、とりあえずトマトを記事にしてみることにした。

第一回目は買ってきたものとその準備。

◆買ってきたもの

  • プランター(木製の桶型のもの)
  • 水差し
  • スコップ
  • 培養土
  • 赤玉土
  • 肥料

  • トマトの種(イタリアントマト)

この品種のトマトは支柱が要らないタイプ(パッケージの説明書きに書いてあった)なのでお手軽に出来そうだからこれにした。

◆土の準備と種蒔き

全くの初心者だから何一つ自信ないけど、土のパッケージとか参考にしながら土を準備。
写真は赤玉土を底に敷いて、培養土を3〜4cm敷いたら肥料を混ぜて、また培養土を重ねる感じでつくってみた。

白いのは種の袋。種を袋から出してみてびっくりしたんだけど、普段食ってるトマトと何も違わなかった。そりゃ当然だよねトマトなんだから。


それにしても種あまりすぎ…こんなちっちゃいプランターじゃ全然減らない。これ保存が効くのだろうか……?
3つ穴をつくって種まいてみた(暗くて見えない)

で、発芽するまでは土を乾燥させすぎない暖かい所がいいらしいんだけど、今年は4月に入ってもなかなか気温が上がらない。
なのでゴミ袋でビニールアウス的にしてみることにした。

あまった土をまとめた袋と並べて置いたらゴミにしか見えない…


初日はこんなところ

日付
2012.04.08
気温
11℃
天気
晴れ