Rails 3.2.8をUbuntuに一からインストールしてみる

UbuntuにRails3.2.8の実行環境を一からインストールしてみます。

Ubuntuは12.04を使用します。

まずは

Rubyから、と言いたい所ですが、必要パッケージ類から
[shell]sudo apt-get install make build-essential libssl-dev zlib1g-dev \
apache2-mpm-prefork apache2-prefork-dev libapr1-dev libaprutil1-dev \
libcurl4-openssl-dev libmysqlclient-dev[/shell]
MySQLをインストール
[shell]sudo apt-get install mysql-server mysql-client[/shell]
続いて、RubyはUbuntuのパッケージで1.9.3と言うのがあるので、これを入れます。
[shell]sudo apt-get install ruby1.9.3[/shell]
Railsを入れます。
[shell]sudo gem install rails -v3.2.8 –no-ri –no-rdoc[/shell]
riとrdocはいらないので、無しオプション付きで。

MySQLとのコネクタgemをインストール
[shell]sudo gem install mysql[/shell]
Passengerをインストール
[shell]sudo gem install passenger[/shell]
Passengerのコンパイル
[shell]sudo passenger-install-apache2-module[/shell]
Passengerの設定ファイルを作成

passenger-install-apache2-moduleの実行後にpassenger_moduleに関する設定が3行表示されるので、それを

/etc/apache2/conf.d/passenger.conf

に設定

ここからRailsの操作になります。

新しいプロジェクトを作成
データベースはMySQLを使うので、オプション指定
[shell]rails new myproj -d mysql[/shell]
ひとまず、rake -Tをしてみます。
[shell]rake -T[/shell]
rake -T とやると、エラーになります。

Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

これは、JavaScriptのランタイムが設定されていないと言っているので、GemFileに
[shell]gem ‘execjs’
gem ‘therubyracer'[/shell]
という2行を追加して

bundle 実行します。

これで、rake -Tの結果が表示されるようになったと思います。

続いて、MySQL上にデータベースを作成します。
[shell]mysql -uroot -p[/shell]
でMySQLにログイン後、テーブル作成
[shell]create database muproj_development;
exit[/shell]
続いて、実験用にusersテーブルを作ります。
[shell]rails g scaffold users name:string age:integer[/shell]
これで、users用のコントローラやモデルなどが一式作成されます。

データベースにテーブルを作成します。
[shell]rake db:migrate[/shell]
これで、myprojの準備は整いました。
[shell]rails s[/shell]
でmyprojを起動してみましょう。

正常に起動出来たら、ブラウザからアクセス

http://localhost:3000/users

 

Rails 3 の環境でstylesheetにlessを使う

Rails 3.2では、javascriptやstylesheetはassetにまとめられます。

ここにまとめられたものは
例えばstylesheetであれば自動的に「コントローラ名.css.scss」がcssコンパイルされ、
リンクされます。自分で指定する場合は
[shell]<%= stylesheet_link_tag “users” %>[/shell]
とすればリンク出来ます。

さて、Rails3.2では、stylesheetはscssが、JavaScriptはCoffeScriptがそれぞれ

標準で使用されるようです。

例えば、stylesheetでlessを使いたい

といった場合には

GemFileのassetグループの中に
[shell]group :assets do
  gem ‘less-rails’,   ‘~> 2.2.3’
end[/shell]
という感じでgemをしていしてやると、自動で*.lessファイルを展開してくれるようになります。

VMware ESXi 5.1で仮想マシンのディスクをシックプロビジョニングからシンプロビジョニングに変更する

VMware ESXi 5.1上の仮想マシンのディスクを変換出来るのか?

と思って調査してみました。

まず、VMware ESXi 5.1にアクセスするために

VMware ESXi 5.1にSSH出来るように設定する必要があります。

VShere Clientを開き、サーバの構成の中から「セキュリティプロファイル」を選択します。

サービスのプロパティを開き、SSHを開始します。
同様に、ESXiシェルを開始します。

これで、VMware ESXiにSSHでリモートログイン出来るようになります。

TeraTermProからログインしてみます。
※お好きなターミナルで

チャレンジレスポンス認証を選択

これで、VMware ESXiのログイン情報を使って、ログインしました。
[shell]cd /vmfs/volumes[/shell]
とすれば、データストアのあるパスにいけます。

あとは、ディスクをシンプロビジョニングにしたい仮想マシンまでたどっていきます。

仮想ディスクを変換するためのコマンドが

vmkfstools

となります。

仮想ディスクをシンプロビジョニングにするコマンドは
[shell]vmkfstools -i /vmfs/volumes/path/to/disk.vmdk -d thin /vmfs/volumes/path/to/disk-thin.vmdk[/shell]
となります。

-iで、元になる仮想ディスクを指定、-dでシンプロビジョニングにする指定

あとは変換後の仮想ディスク

以上で、シックプロビジョニングの仮想ディスクからシンプロビジョニングに変換出来ます。

lsyncの同期ファイル検知数上限と変更方法

lsyncdは、ディレクトリの変更を検知して、即座に同期させるというモジュールです。

ファイルの追加・変更・削除などがリアルタイムに同期される便利な物です。

便利なのですが、同期ファイルを増やしすぎると、上限に引っかかって、同期されなくなったりします。

lsyncdはディレクトリの変更を検知するためにinotifyというAPIを使用します。

このAPIでの検知出来るファイルの上限が

lsyncdがディレクトリ内の変更を検知するために使う「inotify」には、「1ユーザが監視できる最大ディレクトリ数」というものがあり、デフォルトで8192(Ubuntu12 serverでは16384)に設定されています。

設定してある場所が
/proc/sys/fs/inotify/max_queued_events

です。

explzhの64bit版でtarを使う

explzhのアーカイバDLLの自動アップデートでは
どうもtarの64bit版はリストに含まれていないようで、tarファイルを解凍しようとするとtar64.dllを入れろと出てきます。

この場合、SuperASF の作者様のサイトよりダウンロード可能なtar64.dllをインストールすることでtar解凍ができるようになります。

tar64.dllをインストールするには

上記サイトよりtar64.dllをダウンロード後解凍し
tar64.dll、tar64.libの二つをc:\windows\system32へコピーします。

以上でtar解凍が出来るようになると思います。

WinSCPで自動でディレクトリの同期

WinSCPにはコマンドモードがありますが

このコマンドモードでスクリプトを少しだけ書いて実行してあげると

サーバのディレクトリとWindows上のフォルダの中身を自動で同期してくれる。

スクリプトというのは
[shell]option batch on
open bnavi@192.168.1.100
sync remote -filemask=”| .svn/;*.log” -delete C:\Users\hogehoge\Documents\eclipse /home/hogehoge/product
keepuptodate -filemask=”| .svn/;*.log” -delete C:\Users\hogehoge\Documents\eclipse /home/hogehoge/product
exit[/shell]
という感じで書きます。

このファイルを

WinSCPに食わしてやると、自動同期開始。
[shell]”C:\Program Files (x86)\WinSCP\WinSCP.com” /script=”C:\Users\hogehoge\Documents\winscp-keepuptodate.txt”[/shell]

コマンドプロンプトを起動するのはめんどくさいので、ディスクトップにショートカットを作成してみます。

WinSCPのショートカットをまず作成します。

リンク先に、先ほどの実行コマンドを指定します。

VMware Playerで、仮想マシンのメモリ空間をファイルベースでは無く実メモリベースで実行する

なんか難しいお題ですが

ようは.vmemという拡張子が付くファイルを生成せずに仮想マシンを実行するという話です。

この.vmemという拡張子が付くファイルは、仮想マシンの設定のメモリ量に応じてサイズが増えます。

2Gのメモリを指定したら、このファイルも2G

さすがに2Gともなると、ファイルアクセスでずいぶんとパフォーマンスが削られてしまうので

この2G.vmemファイルを作らないで仮想マシンを実行したいと思います。

設定方法は

.vmxという仮想マシンの定義ファイルがあるのですが、このファイルをnotepadやエディタで開きます。

ファイルの最後で良いと思うのですが
[text]mainMem.useNamedFile = “FALSE”[/text]
を追記してあげます。

これだけです。

Play Frameworkでapplication.confではなく、別の設定ファイルを読み込んで起動する設定

application.confには前環境で共通の内容を設定
prod.confには、本番環境用のみのものを設定

という感じで、本番と開発で設定を分けたいなと思います。

これを実現するには

起動時のパラメータに以下のような設定を追加することで実現出来ます。
[text]config.resource=prod.conf[/text]
このconfig.resourceというのは、Play プロジェクト内のリソースとしてのprod.confを読み込みます、という設定なので、
confディレクトリに格納しておく必要があります。

confディレクトリに捕らわれずに別の場所に置きたいという場合は

config.fileにすればフルパスで設定することが出来ます。