Dear Eye-Fi Purchaser, We regret to inform you that we cannot fill your order for an Eye-Fi card to ship outside the United States. The manufacturer has not yet received government certification to use the wireless spectrum in your country. Your credit card will not be charged for this transaction. We will alert you when Eye-Fi has received permission to sell in your country. In the meantime, please take advantage of the many services of www.dotPhoto.com through our standard Internet upload. Sincerely, dotPhoto Customer Serviceしょんぼりー。
$ sudo gem install railsってな感じになるんですが、Debian(Sarge)だと
sudo: gem: command not foundって動かないんですよ。gemをフルパスで指定すると
$ sudo /opt/local/bin/gem install rails /opt/local/bin/gem:9:in `require': no such file to load -- rubygems (LoadError) from /opt/local/bin/gem:9今度は環境変数GEM_HOMEも参照できない模様。しょうがないので、suしてgemしてたんですが、いい加減、気にくわないので、ちゃんと調べてみた。でも、解決しなかった! 問題点は2つありまして
Sudo before 1.6.8 p12, when the Perl taint flag is off, does not clear the (1) PERLLIB, (2) PERL5LIB, and (3) PERL5OPT environment variables, which allows limited local users to cause a Perl script to include and execute arbitrary library files that have the same name as library files that are included by the script.ブラックリスト方式からホワイトリスト方式なったと。同時にリストを操作する方法も追加されたので、変更してみました。スーパーユーザでvisudoを実行すると/etc/sudoersがエディタで開かれるので以下の行を追加。
Defaults env_keep+="PATH GEM_HOME RUBYLIB"env_keepという変数に+=で値を追加しています。PATHとGEM_HOMEとRUBYLIB。詳しくはsudoers(5)を参照してください。 これで後者は解決しました。gemをフルパスで指定すると無事に起動しました。しかし、PATHについては利用してくれない・・・。 いろいろを見てみたところ、
$ echo $PATH /opt/local/rubygems/bin:/opt/local/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin $ printenv PATH /opt/local/rubygems/bin:/opt/local/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin $ sudo echo $PATH /opt/local/rubygems/bin:/opt/local/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin $ sudo printenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin変数には設定されているけど、環境変数には設定されていない・・・?sudoが強制的に初期化している気がします。初期値がどこに入っているのかを探したのですが、見つからず。そろそろソースコード見なきゃいけない領域に入ってしまったので、後日に回します。 しかし、まぁ
$ sudo `which gem` install railsで実行できるようになったのは、小さいながらも成果だと思いたい。

また、本作の予約特典として、「L4U! 新曲ダウンロードカード」がプレゼントされる。ダウンロードコンテンツとして、2008年3月末より配信予定の「アイマスL4U! カタログ第2号(仮)」から、「L4U!」の新曲第1弾が無料でダウンロードできるプリペイドコード入りカード。数に限りがあり、先着でプレゼントされるので、予約の際はショップで確認しておこう。「MASTER ARTISTの曲、良いのが多いのに、なんでダウンロードコンテンツで配信しないんだろう?」「システム面の拡張性不足で無理なのかしら?」と思っていたんですが、今回でシステム側が対応するようで。これは素晴らしいね。
# gem install capistrano --include-dependencies Bulk updating Gem source index for: http://gems.rubyforge.org Successfully installed capistrano-2.1.0 Successfully installed net-ssh-1.1.2 Successfully installed needle-1.3.0 Successfully installed net-sftp-1.1.0 Successfully installed highline-1.4.0 Installing ri documentation for net-ssh-1.1.2... Installing ri documentation for needle-1.3.0... Installing ri documentation for net-sftp-1.1.0... Installing ri documentation for highline-1.4.0... Installing RDoc documentation for net-ssh-1.1.2... Installing RDoc documentation for needle-1.3.0... Installing RDoc documentation for net-sftp-1.1.0... Installing RDoc documentation for highline-1.4.0...正常にインストールされた場合、capというコマンドが使えるようになります。このコマンドを使って、アプリケーションの配布などを行います。
$ cap --version
Capistrano v2.1.0
RailsにCapistranoを組み込むためには、capifyコマンドの第一引数にRailsプロジェクトのルートディレクトリを指定して実行してください。Capfileとconfig/deploy.rbの2つのファイルが作成されます。
$ capify work/cap_test
[add] writing `work/cap_test/Capfile'
[add] writing `work/cap_test/config/deploy.rb'
[done] capified!
CapfileとはmakeにおけるMakefileやrakeにおけるRakefileのようなものです。このファイルにはタスクを記述することができます。しかし、Rails用の基本的なタスクはすでに定義されているため、特に記述しないで利用することができます。追加タスクを作りたい場合や、既存のタスク内容を変更したい際に編集します。初期状態でのCapfileの内容は以下の通りです。
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
config/deploy.rbにはRailsの配布サーバやソース管理サーバなどを設定します。初期状態でのconfig/deploy.rbの内容は以下の通りです。
set :application, "set your application name here"
set :repository, "set your repository location here"
# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
# set :deploy_to, "/var/www/#{application}"
# If you aren't using Subversion to manage your source code, specify
# your SCM below:
# set :scm, :subversion
role :app, "your app-server here"
role :web, "your web-server here"
role :db, "your db-server here", :primary => true
applicationにはアプリケーション名を指定します。配布先のディレクトリ名などに利用されます。repositoryにはSubversionのリポジトリへのパスを指定します。アプリケーションの配布を行う際はここから取得されます。標準のアプリケーションの配布先は/u/apps/#{application}です。変更したい場合は、deploy_toに配布先のパスを設定します。scmにはソースコード管理システムの名称を指定します。標準ではSubversionになっていますが、この値を変更することによってCVSなどのソースコード管理システムを利用することができます。MicrosoftのVisual Source Safeには対応していないそうです。app・web・dbにはアプリケーションサーバ・ウェブサーバ・データベースサーバの名前、もしくはIPアドレスを指定します。
以上が標準的な設定ですが、他にもいくつか設定できる項目があります。残念ながらCapistranoはまだドキュメントが充実しておらず、ソースコードやコミュニティBBSから情報を集めるしかないようです。以下、便利そうなものをいくつか紹介します。
set :scm_user, "Your SCM user name"
set :scm_password, "Your SCM Password"
ソースコード管理システムにログインするユーザ名・パスワードを指定出来ます。
set :use_sudo, false
標準はtrue。コマンドを実行する際にsudoを利用しなくなります。レンタルサーバなのでsudoが利用できない場合に便利かと思います。
set :user, "Your user name"
サーバにログインする際のユーザを変更できます。
default_run_options[:pty] = true
標準はfalse。pseudo-ttyを利用するかどうか設定できます。バージョン2.1からpseudo-ttyを標準では利用しないようになったのですが、いくつかのサーバでは問題が発生することがあり、その際にはこのオプションをtrueに変更すると以前と同じ動作をするよ、ということのようです。
default_run_options[:shell] = false
標準はtrue。コマンドを実行する際にsh -c "コマンド"で発行するのですが、これを無効にすることが出来ます。
コマンド実行について
Capistranoのコマンドを実行する際にはcapというコマンドを使います。
まずはcap -Tでコマンドの一覧を確認します。
$ cap -T
cap deploy # Deploys your project.
cap deploy:check # Test deployment dependencies.
cap deploy:cleanup # Clean up old releases.
cap deploy:cold # Deploys and starts a `cold' application.
cap deploy:migrate # Run the migrate rake task.
cap deploy:migrations # Deploy and run pending migrations.
cap deploy:pending # Displays the commits since your last deploy.
cap deploy:pending:diff # Displays the `diff' since your last deploy.
cap deploy:restart # Restarts your application.
cap deploy:rollback # Rolls back to a previous version and restarts.
cap deploy:rollback_code # Rolls back to the previously deployed version.
cap deploy:setup # Prepares one or more servers for deployment.
cap deploy:start # Start the application servers.
cap deploy:stop # Stop the application servers.
cap deploy:symlink # Updates the symlink to the most recently deployed ...
cap deploy:update # Copies your project and updates the symlink.
cap deploy:update_code # Copies your project to the remote servers.
cap deploy:upload # Copy files to the currently deployed version.
cap deploy:web:disable # Present a maintenance page to visitors.
cap deploy:web:enable # Makes the application web-accessible again.
cap invoke # Invoke a single command on the remote servers.
cap shell # Begin an interactive Capistrano session.
Some tasks were not listed, either because they have no description,
or because they are only used internally by other tasks. To see all
tasks, type `cap -Tv'.
Extended help may be available for these tasks.
Type `cap -e taskname' to view it.
cap deploy:setupで配布先サーバにCapistranoで必要なディレクトリを作成します。このコマンドは配布先サーバが変更、または増えた場合にも実行する必要があります。
$ cap deploy:setup
* executing `deploy:setup'
* executing "umask 02 && mkdir -p /home/hajime/production/nanigadeta /home/hajime/production/nanigadeta/releases /home/hajime/production/nanigadeta/shared /home/hajime/production/nanigadeta/shared/system /home/hajime/production/nanigadeta/shared/log /home/hajime/production/nanigadeta/shared/pids"
servers: ["localhost"]
[localhost] executing command
command finished
Capistranoでは実行しているコマンドがこのようにログに表示されるため、処理内容の確認がしやすくて良いです。
続いて、cap deploy:coldで初回配布を行います。(coldの意味がわからないけど、初回はこれらしい) コマンドを実行するとSubversionから最新のソースコードが取得され、setupで作成したreleaseディレクトリ以下のサブディレクトリに格納されます。最後にcurrentディレクトリにシンボリックリンクが張られます。最新版を参照する際は常にcurrentディレクトリを見ればよいわけです。
coldの意味を調べました。
/opt/local/rubygems/gems/capistrano-2.1.0/lib/capistrano/recipes/deploy.rbのdesc曰く
Deploys and starts a `cold' application. This is useful if you have not deployed your application before, or if your application is (for some other reason) not currently running. It will deploy the code, run any pending migrations, and then instead of invoking `deploy:restart', it will invoke `deploy:start' to fire up the application servers.拙い和訳
`cold'アプリケーションを配布し、起動します。以前にアプリケーションを配布していない場合や、(なんらかの理由で)現在あなたのアプリケーションが稼動していない場合に便利です。これは、コードを配布し、保留されているすべてのマイグレーションを実施し、そして、'deploy:invoke'を実行します。 これは、 'deploy:start'を実行し、アプリケーションサーバを起動します。deployとの違いはmigrateの実施の有無だけでした。「固まって凍っていた」アプリケーションを配布することによって解凍する、という意味合いのようです。 Twitter上でnorioさんに助けていただきました、ありがとう! 2回目以降の配布はcap deployで行えます。環境構築をするまでは大変ですが(自分はSSHがらみでハマりました)、一度構築してしまえば、アプリケーションの配布が楽になり、作業負担やケアレスミスを減らすことができます。 以下、Mongrel用の解説です。 アプリケーションの配布が正常に終了すると、Capistranoはサーバの再起動を試みます。この際に利用するコマンドがscript/spinです。ここにWebサーバごとの起動コマンドを記述する必要があります。自分の場合、フロントにlighttpdを利用して、バックには4つのMongrelプロセスを8000〜80003番のポートで開いています。フロント側はシステム起動時に起動しているので、バックのMongrelの起動方法をscirpt/spinに記述します。
/path/to/rails/application/current/script/process/spawner -p 8000 -i 4
/path/to/rails/applicationは適宜置き換えてください。最後にSubversionでこのファイルに実行属性を付加するように指定しておきます。
$ svn proplist script/spin
Properties on 'script/spin':
svn:executable
解説は以上です。独自タスクの作成など他にもいろんな機能があるので、ぜひ調べてみてください。
明日発売だというのに! Amazon良い仕事!!
シングルからの再録が4曲、新曲が11曲でした。新曲の中でお気に入りは「SEVEN」かな。しかし、「アオイイロ」の方が上。
