スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

『RailsによるアジャイルWebアプリケーション開発 第4版』 第16章 第2節 訂正

『RailsによるアジャイルWebアプリケーション開発 第4版』の『16.2 Capistranoによるリモートでのデプロイ』のコードがバージョン違いにより動かなかったので報告。

【0】問題

問題のコードはp.227のdeploy.rb。

deploy.rb を書籍通りに設定して、次のページに進み、

$ cap deploy:setup

すると、

RVM - Capistrano integration was extracted to a separate gem, install: `gem install rvm-capistrano` and remove the `$LOAD_PATH.unshift` line, note also the 'set :rvm_type, :user' is now the default (instead of :system). (RuntimeError)

なるエラーを吐かれます。

Google先生に聞いてみたところ、新しいRVMに起因するエラーみたいです。
とりあえず、解決をはかっていきます。


【1】gem「rvm-capistrano」を入れる

アプリケーションルートのGemfileに以下の行を追加します。

gem 'rvm-capistrano'

そして、

$ bundle install




【1】deploy.rbの修正

APP_ROOT/config/deploy.rb を修正します。
【修正前】

$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require "rvm/capistrano"
set :rvm_rub_string, '1.9.2'
set :rvm_type, :user

 ↑をこうします↓
【修正後】

require "rvm/capistrano"
set :rvm_ruby_string, '1.9.2'


これで正常に動作し、cap deploy:setup が通るようになりました。

ただ、解決までにかなり時間がかかり、ここに書いていないこともいろいろ試したので、もしかすると上記の方法だけでは解決しないかもしれません。その際はごめんなさいw
スポンサーサイト

ファイルサーバーの状態を Munin で監視

以前、ファイルサーバーを立てたはいいものの、ろくに管理もせずほったらかしにしていたので、管理用ツールの Munin をインストールします。

【環境】
Ubuntu 12.04


【1】apache2 及び Munin のインストール

Munin と、それを動かすために必要な Apache を入れていきます。

$ sudo apt-get install apache
$ sudo apt-get install munin munin-plugins-extra


これだけで入ります。そう、Ubuntuならね。

注意点も、「必ず apache を先に入れる」ということくらいです。


【2】Munin の設定

設定と言っても大した設定もないんですが、/etc/munin/apache.conf の冒頭付近に以下の行を追記しました。

Allow from 192.168.0.0/24

言うまでもないことですが、ネットワーク環境によって、テキトーに書き換えてください。
上記の例だと、[192.168.0.*」からのアクセスを許可しています。

設定を有効にするために apache を再起動。

$ sudo service apache2 reload


これで、「http://ホスト名/munin/」にアクセスすることによってサーバーの各種状態を見ることができるようになります。
(ただし、情報が蓄積されるまでしばらく時間がかかります)


本当はパスワード設定とかもした方がいいんでしょうけど、面倒なので今回はパスで。

Rails で実行環境をプログラム側から取得

Railsで実行環境(test/development/production)を取得するには、ENV['RAILS_ENV'] を用います。

ヘッダやサイドバーに

<% unless ENV['RAILS_ENV'] == "production" %>
 <%= ENV['RAILS_ENV'] %>
<% end %>

とか書いておくと、今見ているアプリケーションがどの環境で実行されているのか一目でわかって便利かも。

『RailsによるアジャイルWebアプリケーション開発 第4版』 第16章 第1節 補足

Railsの勉強に使わせていただいている『RailsによるアジャイルWebアプリケーション開発 第4版』ですが、わかりにくい場所が何箇所かあります。
いや、すべての環境をカバーするのが無理なのはわかってるんですが。

とはいえ、本だけ見ててもサクッと進めないのは事実なので、また、この章(『16.1 Phusion PassengerとMySQLを使ったデプロイ』)はわかりにくい場所が特に多いので、自分の環境で気になったところを簡単に補足しておきます。

【環境】
Ubuntu 12.04
Apache 2.2.20
ruby 1.9.2p320
Rails 3.1.0


【1】p.219「Passengerのインストール」

Passengerのインストールに絡んで、apacheの設定をいじるあたりで、

$ apache -V | grep HTTPD_ROOT
$ apache -V | grep SERVER_CONFIG_FILE

して設定ファイルの場所(/etc/apache2/apache2.conf)を調べ、設定ファイルの「Listen 80」の後ろに

NameVirtualHost *:80

と書き込めというくだりがあるんですが、apache2.confをいくら探しても「Listen 80」が見つかりません。

というのも、Debian/Ubuntuではこのapache2.confとは別に/etc/apache2/ports.confという設定ファイルがあり、ここにポート関連の設定を書き込むみたいなので、このファイルを書き換えてください。
(ただし、ports.confには既に「NameVirtualHost *:80」が書き込まれていると思います)


【2】p.220「ローカルでのアプリケーションのデプロイ」

このセクションでも

<VirtualHost *:80>
 ServerName hostname
 DocumentRoot /home/username/work/depot/public/
 <Directory /home/username/work/depot/public>
  AllowOverride all
  Options -MultiViews
  Order allow,deny
  Allow from all
 </Directory>
</VirtualHost>

などという設定を書き込めと言われますが、どの設定ファイルに書き込めば良いのかが書かれていない。

普通ならapache2.confしかないので大丈夫なんでしょうが、Debian/Ubuntuの場合、この設定もports.confに書き込みます。

この状態でapacheをrestartしてページにアクセスすると「We're sorry, but something went wrong.」というページが表示され、production環境でアプリケーションが動きません。

ちなみに、これはアプリケーションのpublicディレクトリに入っている500.htmlが表示されている状態です。
試しに、適当に作ったindex.htmlをpublicディレクトリに置いてみると、その内容が表示されるのがわかります。

また、ports.confに「RackEnv development」を追加してみると、development環境のアプリケーションが起動します。

いろいろググってみると、偉大なる先人の記事にヒット。
http://d.hatena.ne.jp/tetsuyai/20110920/1316504421

要するにRails 3.1のバグ(?)で、config/evironment/production.rbまわりの設定が原因みたい。

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = true

config.assets.compileの値をfalseからtrueに変更すればproduction環境でアプリケーションが起動します。


【3】p.221「MySQLデータベースの利用」

まずはじめに、mysql2のgemをインストールするところ。
書籍に書かれている通りにGemfileを設定してアプリケーションディレクトリで

$ bundle install

を実行すると、gem管理ツールであるbundlerがGemfileに書かれたgemをインストールしてくれます。

また、p.222の

$ mysql -u root

に関してですが、MySQLインストール時(書籍で言うとかなり初めの頃)にパスワードを設定した場合、

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

というメッセージと共に弾かれます。

$ mysql -u root -p

とすれば、コマンド実行直後にパスワードを尋ねられるので、その際に以前設定したパスワードを入力してください。

また、その先のdatabase.ymlの場所は、アプリケーションディレクトリのconfig/database.ymlにあります。
なお、YAMLファイルのインデントにタブは使えないので、半角スペースでインデントしてください。

Mechanize が Ruby 1.9.3 に対応!?

以前から便利に使わせてもらっているRubyのスクレイピングライブラリ「Mechanize」が Ruby 1.9.3 に対応したみたいです。
http://mechanize.rubyforge.org/

近いうちにこれをつかったプログラムを書くと思うので、詳しい記事はそのときにでも。

UbuntuにThnikPadキーボードつないでみた。

最近、英語キーボードが気になっていたので、買ってみました。

ThinkPad キーボード


ThinkPadキーボード(英語)です。
これで、マウスともおさらばだぜ!

というわけで、簡単な設定を。


【1】NumLock解除

環境にもよると思いますが、NumLockがかかった状態だとテンキーモードになり、J,K,Lあたりをはじめテンキーを割り振られているキーの文字を打てません。
というわけで、「Fn + NumLk」でNumLockを解除します。


【2】キーボード設定を英語に変更

「システム設定→キーボードレイアウト」で「英語(US)」のキーボード設定を追加します。
変更後、Shiftを押しながら数字の2キーを押して、「@」が入力されればOKです。


【3】iBusの設定

英語キーボードには言うまでもなく「半角/全角」キーがないので、そのあたりの設定をします。

UbuntuデフォルトのAnthyだと、Ctrl+Spaceで日本語入力と英語入力の切換ができるらしいのですが、Mozcで試してみたところ切り替わりませんでした。

というわけで、「キーボード・インプットメソッド→キーボードショートカット→切り替え」で任意のキーを設定します。キーボード・インプットメソッドはUnityで検索かければすぐに見つかります。



大した設定をしていませんが、こんな感じですかねー?
ちなみに、トラックポイントは特にドライバを入れたりする必要もなく、つないだ瞬間から使用可能です。

『RailsによるアジャイルWebアプリケーション開発 第4版』 第10章 第3節 誤植

Rails の勉強に使っている『Rails によるアジャイル Web アプリケーション開発 第4版』の第10章 第3節(10.3 カートの仕上げ)に誤植があったので、報告しておきます。

P.119 最下部に書いてあるテストコードを書かれたとおり実行すると、以下のエラーが出て、テストが通りません。

【エラー例】

FAIL should destroy cart (0.07s)
  "Cart.count" didn't change by -1.
<1> expected but was
<2>.
  /home/ubuntu/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.1.0/lib/active_support/testing/assertions.rb:60:in `block in assert_difference'



【誤】
test/functional/carts_controller_test_rb

test "should destroy cart" do
assert_difference('Cart.count', -1) do
  delete :destroy, {id: @cart.to_param}, {cart_id: @cart.id}
 end

 assert_redirected_to store_path
end


【正】
test/functional/carts_controller_test_rb

test "should destroy cart" do
 assert_difference('Cart.count', -1) do
  session[:cart_id] = @cart.id
  delete :destroy, id: @cart.to_param
 end

 assert_redirected_to store_path
end



※注意※
 上記のサンプルはインデントを表現するために全角スペースを使っています。
カレンダー
06 | 2012/07 | 08
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
検索フォーム
カテゴリ
月別アーカイブ
最新記事
最新コメント
最新トラックバック
RSSリンクの表示
QRコード
QR
リンク
アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。