シェルの作業をファイルに記録する

$ script <ログファイル名>

scriptコマンドを実行すると、新たにシェルが起動し、 そのシェルを終了するまでの間の入出力をログファイルに記録してくれる。
終了するには、exit。
ログファイル名を省略した場合は、カレントディレクトリの typescript という名前のファイルに記録される。
デフォルトではログファイルは上書きされる。追記したい場合は、-a オプションを付ける。

コマンドの出力をファイルに記録する - いますぐ実践! Linuxシステム管理 / Vol.079.

Install Ruby 1.9.3 with libyaml on CentOS

CentOS 5.8にRuby 1.9.3をソースからインストール後、gemを実行したら、

It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.

というワーニングが出た。

libyamlはyumになかったので、LibYAML – PyYAMLからソースをダウンロードしてインストール。
その後Ruby 1.9.3を再インストールしたらワーニングは出なくなった。

Install Ruby 1.9.3 with libyaml on CentOS // Collective Idea.

gemを全部削除する

わけあって、インストールされているgemを全部削除した。
手順は、以下の通り。

  1. gem listでインストールされているgemをリストする。
  2. リストしたgemのかっこで囲まれたバージョン情報のところと改行を削除して、スペース区切りのリストにする。
  3. 以下で一括削除。
    $ sudo gem uninstall -Ixa actionpack activemodel activerecord ...(以下gemのスペース区切りリスト)

optionの意味は、

-a, --[no-]all                   Uninstall all matching versions
-I, --[no-]ignore-dependencies   Ignore dependency requirements while
                                 uninstalling
-x, --[no-]executables           Uninstall applicable executables without
                                 confirmation

もっと良い方法がありそうだけど。

cronでRVMのRubyを使う

RVMで複数のRuby環境がある場合に、Railsアプリケーションのためのcronをどうするか? Rubyのパスはフルパス指定すればいいが、gemがRVMのgemを見に行かないのが問題。RVM環境でcronを実行する必要がある。

RVM: Ruby Version Manager - Using Cron with RVM

cron用のシェルスクリプト内で使用するRVM環境をロードするには以下のようにする。

まず、環境ファイルのパスを確認

$ rvm env --path -- ruby-version[@gemset-name]

実行例

$ rvm env --path -- 1.8.7-p371
/Users/pistolfly/.rvm/environments/ruby-1.8.7-p371

cron用のシェルスクリプトで環境ファイルを読み込む

source /Users/pistolfly/.rvm/environments/ruby-1.8.7-p371

/home/pistolfly/app_dir
ruby script/runner -e production "ActiveRecord::SessionStore::Session.delete_all(['sessions.updated_at < ?', 6.hours.ago])"

Developer Blog