2013年7月28日日曜日

Nginx+unicornでRailsを動かす


local PCのブラウザから「http://192.168.33.10:8080」を指定。すると、下記のように表示されます。 動作確認後、一旦「Ctl + c」でunicorn_railsを停止します。
このエントリーをはてなブックマークに追加

2013年7月25日木曜日

vagrant + chef solo + Berkshelf環境で、opscode-cookbookと自作cookを混在させたらハマった。その対応

前回のblogで、berks cookbookコマンドを用いたrepository作成の手順を紹介しました。
ただし、berks cookbookコマンドで作成したrepositoryはcookbookそのものでもあり、defaultの設定・環境だと、サードパーティのcookbook利用する場合、ファイル構成が分かりにくいものとなってしまいます。

そこで、前回ハマった「knife solo init」コマンドで作成したrepositoryにVagrantfileを用意し、サードパーティー(opscode-cookbooks)と自作cookbookを混在させる方法について再度見直しを行い、正常動作できるようにしたいと思います。

対応方法

先に結論を書くと、Berksfileに自作cookbookをpathで明示的に指定してあげました。こうすることで、opscodeのcookbookはネットからDL(git clone?)されるのに対して、自作cookbookはlocalの指定されたpathのdirを参照し、適切に動作するようになりました。

pochi-2:chef-repo snumano$ cat Berksfile
site :opscode

cookbook 'apt', '= 1.9.0'
cookbook 'mysql'
cookbook 'nginx'
cookbook 'database'
cookbook 'myapp', path: './site-cookbooks/myapp'    #追加行


コードはこちら

https://github.com/snumano/vagrant-knifesolo2


参考

http://berkshelf.com/
入門Chef Solo



まとめ

今回でやっと、Vagrant + Chef Solo + Berkshelfの対応手順が整理できました。
「こっちのやり方の方がいいよ」など情報ありましたら、お知らせいただけたら幸いです。
このエントリーをはてなブックマークに追加

2013年7月23日火曜日

vagrant + chef solo環境で、opscode-cookbookと自作cookを混在させたらハマった

表題の通りハマったので忘備録として残しておきます。

事象

  • knife solo initコマンドでrepositoryを作成後、opscode-cookbookからnginx,mysql,databaseなどのcookbookをberkshelfコマンドでinstall。
  • また、自作cookbookをknife cookbook createコマンドで作成。
  • 自作cookbookのrecipeを書いた後、vagrant upすると、自作cookbookが見つからない旨のerrorが発生。
  • error内容を確認すると、vagrant up時に、brrkshelfコマンドが実行され、Berksfileに記載されたcookbooksが~/.berkshelf/default/vagrant/berkshelf-***-default以下に作成され、chef soloコマンドにて仮想環境に転送されるよう。しかし、このberkshelf-***-default以下に、自作cookbookは作成されず、結果errorとなっている模様。
  • ちなみに、下記のopscode-cookbookのchef-repoをcloneした場合も、knife solo initの場合と同様に、errorになることを確認した。
  • git clone https://github.com/opscode/chef-repo.git
    

コード

原因

  • 不明

対応

  • Berkfsfileを_Berksfileにrename後、vagrant up実行すると正常に処理完了した。
    berkshelfコマンドの実行を抑制する事で、上述の事象は発生しなくなった。
    しかし、利用はよくわからない。
  • このままだと気持ち悪いので、Berkshelfコマンドを用いたrepository作成を試したところ、vagrant upの正常実行を確認できた。
    https://github.com/snumano/vagrant-berkshelf

まとめ

  • Berkshelfコマンドでrepository作成した場合、knife solo initした場合と比較して、ファイル構成とVagrantfileの設定内容が異なる事は確認できたが、どの部分が今回の動作の違いになっているのかは、今のところ不明。
  • 本事象の原因と根本対策について、どなたか教えていただけたら幸いです。
    (2013/7/23追記:Berksfileに自作cookbookをpath optionとともに追記することで、本事象を回避できることを確認しました。後日blogにまとめます)
  • berks cookbokコマンドは、cookbook = repositoryとして扱うようです。上述のサンプルコードでは、repository名であるchef-repoがそのままcookbook名になっているので、少しかっこ悪い。。。

最後に、入門Chef Soloは何回も読み返して参考にさせていただきました。






このエントリーをはてなブックマークに追加

2013年7月18日木曜日

vagrant + knife soloでnginxをinstallしてみる

備忘録としてまとめます。

local環境


  • MacOSX 10.8.4
  • ruby 1.9.3p327

作成する仮想環境


  • Ubuntu 12.04
  • Nginx

手順

  1. chef-soloをinstall
  2. $ gem install chef
    $ knife -v
    Chef: 11.4.4
    
  3. knife-soloをinstall。最新のver0.3.0をinstallするため、githubからcloneします。
    $ git clone git@github.com:matschaffer/knife-solo.git
    $ cd knife-solo
    $ bundle
    $ bundle exec rake install
  4. Virual Boxをinstall
    こちらからDownLoad
  5. vagrantをinstall
  6. $ gem install vagrant
    
  7. vagrant環境を作成
    vagrantbox.esから使いたいboxを選ぶ
    $ vagrant box add ubuntu12_04 http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-vagrant-amd64-disk1.box
    $ vagrant box list
    $ mkdir Ubuntu
    $ cd Ubuntu
    $ vagrant init ubuntu12_04
    $ vagrant up
    
    下記で仮想環境にアクセスできる
    $ vagrant ssh
    
    knife soloでsshアクセスできるように下記を実施。host名はdev1とする。
    $ vagrant ssh-config --host dev1 >> ~/.ssh/config
    
  8. 仮想環境にknife soloをinstall
    $ knife solo prepare dev1
    
  9. cookbookレポジトリを作成。
    とりあえず、上述のVagrantのdirに一緒に作成しておきます。
    $ knife solo init chef-repo
    $ cd chef-repo
    $ git init
    $ git add .
    $ git commit -m 'init'
    
  10. 仮想環境にinstallするレシピを書く
    $knife cookbook create nginx -o site-cookbooks
    $vi site-cookbooks/nginx/recipes/default.rb
    package 'nginx' do
      action :install
    end
    
    service "nginx" do
      supports :status => true, :restart => true, :reload => true
      action [ :enable, :start ]
    end
    
    $ vi nodes/dev1.json
    {
      "run_list":[
        "nginx"
      ]
    }
    
  11. 仮想環境にレシピを適用
    $ knife solo cook dev1
    
  12. 仮想環境側で確認
    nginxのバージョンが最新にならない。。。srcからinstallしようかな。。。
    $ nginx -v
    nginx version: nginx/1.1.19
    
  13. 動作確認したら、recipeをcommit
    $ git add ./site-cookbooks/nginx/
    $ git commit -m 'add nginx recipe'
    

参考:
入門Chef Solo
http://docs.komagata.org/5098
このエントリーをはてなブックマークに追加

2013年7月15日月曜日

「プログラミング入門 - Rubyを使って -」をやってみた その1

Rubyの勉強に下記サイトの練習問題に挑戦します。1章はirbを使ってます。
プログラミング入門 - Rubyを使って -, by Chris Pine, 日本語ver. by S. Nishiyama

1.数(Numaber)

  • 1年は何時間でしょうか?
    うるう年ではないとします。
>> 24*365
=> 8760
  • 10年間は何分でしょうか?
    うるう年が2回ありますので、計算に含めます。
>> 60*24*(365*10+10/4)
=> 5258880
  • あなたが生まれてから今日まで何秒たっているでしょうか?
>> (Time.now - Time.local(1973,12,3,0,0,0)).to_i
=> 1250124789
  • あなたは一生のうちいくつのチョコレートを食べたいですか?
    1週間に1つのチョコを食べるとします。
>> (80*365)/7
=> 4171
  • 私が生まれてから10億3400万秒 たっているとしたら、私は今何歳でしょう
>> 1034000000/(60*60*24*365)
=> 32

4.数と文字列の変換

  • 最初に姓、次に名前を聞いて、最後にフルネームに対してあいさつを するようなプログラムを書いてみましょう。
pochi-2:Test snumano$ cat 4-1.rb
#!/usr/bin/ruby

puts 'こんにちは。あなたの姓を入力してください'
last = gets.chomp

puts '次は、あなたの名を入力してください'
first = gets.chomp

puts 'あなたの名前は' + first + ' ' + last + 'ですね。'

pochi-2:Test snumano$ ./4-1.rb
こんにちは。あなたの姓を入力してください
Numano
次は、あなたの名を入力してください
Shugo
あなたの名前はShugo Numanoですね。
  • 好きな数を入力してもらい、それに1を加えて、その結果を ベターな 数字として薦めるプログラムを書きましょう。
  •  
pochi-2:Test snumano$ cat 4-1.rb
#!/usr/bin/ruby

puts 'こんにちは。あなたの姓を入力してください'
last = gets.chomp

puts '次は、あなたの名を入力してください'
first = gets.chomp

puts 'あなたの名前は' + first + ' ' + last + 'ですね。'

pochi-2:Test snumano$ ./4-1.rb
こんにちは。あなたの姓を入力してください
Numano
次は、あなたの名を入力してください
Shugo
あなたの名前はShugo Numanoですね。

5.メソッド(method)

  • 「怒ったボス」のプログラム
pochi-2:Test snumano$ cat 5-1.rb
#!/usr/bin/ruby

$KCODE = 'UTF-8'

puts '望みは何だ?'
hope = gets.chomp

if hope =~ /給料上げてください/ then
  puts 'なにぃ? "給料上げてください" だとー!! おまえは首だ!! '
else
  puts 'なにぃ?' + hope + 'だとー!!お前は首だ!!'
end
pochi-2:Test snumano$ ./5-1.rb
望みは何だ?
休みたい
なにぃ?休みたいだとー!!お前は首だ!!
pochi-2:Test snumano$ ./5-1.rb
望みは何だ?
給料上げてください
なにぃ? "給料上げてください" だとー!! おまえは首だ!! 
  • 「目次」を表示する プログラム
pochi-2:Test snumano$ cat 5-2.rb
#!/usr/bin/ruby

$KCODE = 'UTF-8'

lineWidth = 20
lineWidth2 = 10

index = '目次'
chap1 = '1章:  数'
chap1Page = 'p. 1'
chap2 = '2章:  文字'
chap2Page = 'p. 72'
chap3 = '3章:  変数'
chap3Page = 'p. 118'

puts index.center(lineWidth)
puts chap1.ljust(lineWidth) + chap1Page.center(lineWidth2) 
puts chap2.ljust(lineWidth) + chap2Page.center(lineWidth2) 
puts chap3.ljust(lineWidth) + chap3Page.center(lineWidth2) 
pochi-2:Test snumano$ ./5-2.rb
       目次       
1章:  数             p. 1   
2章:  文字         p. 72   
3章:  変数         p. 118  
今回はここまで。6章以降は後日。。。
このエントリーをはてなブックマークに追加

2013年7月14日日曜日

rbenv install時に、.bashrcと.bash_profile動作の違いでつまずいた

MacOSXにて、複数versionのrubyを切り替えるツールとしてrvmを使っていましたが、rbenvに切り替える事にしました。
rbenv installの際つまずいたのですが、原因は「.bashrcと.bash_profileの動作の違いを理解していなかった」事でした。


詳細は下記の通りです。

  • 下記ブログを参考にさせていただきました
    Mountain Lion に rbenv を導入 - :soy_milk:
  • 上記ブログを参考に対応した場合、対応直後が正常にruby versionの切り替え実施できるのですが、MacBook再起動すると「rbenv globalコマンドでrubyのバージョンを変更しても、実際には変更できない」事象が発生しました。しかも、最初再起動時に発生した事に気づかず、「がちゃがちゃ設定をいじっている間に、rbenvの動作がおかしくなった」と思っていたため、原因の特定に時間がかかりました。
pochi-2:~ snumano$ rbenv versions
  system
* 1.9.3-p327 (set by /Users/snumano/.rbenv/version)
  2.0.0-p247
pochi-2:~ snumano$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
pochi-2:~ snumano$ rbenv global 1.9.3-p327
pochi-2:~ snumano$ rbenv versions
  system
* 1.9.3-p327 (set by /Users/snumano/.rbenv/version)
  2.0.0-p247
pochi-2:~ snumano$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]

  • 対応は下記どちらかを実施します。
    • 「.bashrc」の代わりに「.bash_profile」を指定する
    • もしくは、「.bash_profile」の最後に下記設定を加えておく。
source ~/.bashrc

  • 理由は下記の通り。今回の発生した事象は、後者になります。
    • .bashrcはbash起動時に読み込まれる
    • .bash_profileはログインシェルとして起動された時に読み込まれる   

久しぶりにshellの設定を触ったので、という言い訳で。。。

参考:
rbenvでRubyを複数バージョンインストールする
http://www.proton.jp/main/apps/bash.html
http://stackoverflow.com/questions/10940736/rbenv-not-changing-ruby-version
http://stackoverflow.com/questions/7780030/how-to-fix-terminal-not-loading-bashrc-on-os-x-lion

このエントリーをはてなブックマークに追加