sinatraサーバーをchkconfigで自動起動

sinataraサーバーをEC2の起動時に自動的に起動して、
さらにTwitterのStreaming APIを監視するRubyプログラムも同時起動するのに一苦労。

– chkconfigで起動するシェル (td_aircon) を作成

$sudo su
# cd /etc/init.d/
# touch td_aircon
# chmod 755 td_aircon
# vim td_aircon

td_airconの内容

#!/bin/sh
# chkconfig: 2345 99 10
# description: launch TD_AIRCON sinatra server

export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

cd /home/ec2-user/aircon/aircon-api/
thin start -C thin.yml
ruby tweet_checker.rb

今回は、thinを使ってsinatraサーバーを起動するので、以下のファイルを作る。

$ cd ~/aircon/aircon-api/
$ touch config.ru
$ vim config.ru

config.ruの中身

require 'rubygems'
require 'sinatra'

require File.expand_path "app", File.dirname(__FILE__)
run Sinatra::Application

thinの設定ファイルをつくる

$ cd ~/aircon/aircon-api/
$ thin config -C thin.yml 

出来た thin.yml の中身のポート番号を変更


---
chdir: /home/ec2-user/aircon/aircon-api
environment: development
address: 0.0.0.0
port: 4567
timeout: 30
log: log/thin.log
pid: tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 100
require: []
wait: 30
daemonize: true

自動起動をchkconfigに設定・確認する

# cd /etc/init.d/
# chkconfig --add td_aircon
# chkconfig --list

sinatraサーバーをEC2で起動して外部からアクセス

EC2上でsintraを使ってサーバーを立てようとしたら、ハマったのでメモ。

デフォルトではlocalhost以外から接続出来ない設定になっている。
実行オプションを使って、

bundle exec ruby app.rb -o 0.0.0.0

または

bundle exec ruby app.rb -e production

で起動する。

 

Security Groupの設定で、4567番のポートを開けるのも忘れずに。

 

参考: http://qiita.com/u1_fukui/items/b86b21f6ed39f4c10d5d

MacにrbenvでRuby 2.0環境を追加

以前構築したMacのRuby環境に、Ruby 2.0系を入れようと思ったらハマったのでメモ。

まず、以前、openssl.org が落ちていたせいで、
一部勝手に書き換えていた部分 (http://soohei.net/1041) を元に戻す。

cd /usr/local
git reflog
git reset –hard HEAD@{0}

その後に、Homebrewの中身を最新にする

brew update
brew upgrade ruby-build

インストール可能なRubyのバージョン一覧を確認

rbenv install -l

2.0.0-p247 が出てくるのでインストールする

rbenv install 2.0.0-p247




Downloading ruby-2.0.0-p247.tar.gz…
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz
/usr/local/bin/ruby-build: line 144: pushd: ruby-2.0.0-p247: No such file or directory

BUILD FAILED

失敗する。

どうやらMac OS 10.8系だと、Homebrewを使わないでrbenv環境を作った方がいいみたい。
(ギルドの恋塚さんの助言、その後Homebrewでも出来るとわかった
→ http://shachi.hatenablog.com/entry/2013/08/06/191459 )

まずはHomebrewからrbenvとruby-buildをアンインストール

brew uninstall ruby-build
brew uninstall rbenv

rbenvのディレクトリが残っていたら一度削除
rm -rf .rbenv

新たに、rbenv, ruby-buildをgithubのレポジトリからclone

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

※ レポジトリのURL
https://github.com/sstephenson/rbenv
https://github.com/sstephenson/ruby-build

もう一度インストール

rbenv install -l
rbenv install 1.9.3-p448
rbenv install 2.0.0-p247

rbenv global 2.0.0-p247
rbenv rehash

ruby -v して、
ruby 2.0.0p247 と出力されたらOK

EC2でrbenv、Ruby, Apache, FTPのセットアップ

色々あって、新規に作ったインスタンスを最初からセットアップすることに。

 

SSHでアクセス

$ sudo yum update
$ sudo su

タイムゾーンの設定
# cp -i /usr/share/zoneinfo/Japan /etc/localtime

gitのインストール
# yum install git

 

==

rbenvを使ってシステムワイドにrubyをインストールする方法 #Ruby #rbenv – Qiita [キータ]
http://qiita.com/items/8e973a544b592376a07e

グループ staff の作成と、ユーザーの追加

# groupadd staff

# gpasswd -a ec2-user staff

# exit
$ logout

再度SSHで接続

 

====

rbenvのインストール

$ sudo su
# cd /usr/local

# git clone git://github.com/sstephenson/rbenv.git rbenv
# chgrp -R staff rbenv
# chmod -R g+rwxXs rbenv

# exit

$ vim ~/.bash_profile

.bash_profileに以下を追記

export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

 

====

sudo su してもrbenvを参照するようにする

/etc/profile.d/custom.sh をつくって

export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

を書き込む

色々インストール

 

====

http://blog.marsbar.us/blog/2013/03/13/aws-install-ruby/

$ sudo su
# yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel

# exit
$ logout

再度SSHで接続

 

====

RubyBuildのインストール

$ mkdir /usr/local/rbenv/plugins

$ cd /usr/local/rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git
$ chgrp -R staff ruby-build
$ chmod -R g+rwxs ruby-build

 

====

Rubyのインストール

$ rbenv install 1.9.3-p194

$ rbenv rehash
$ rbenv global 1.9.3-p194

$ which ruby
$ which gem

which gemでrbenvが参照されていることを確認する

 

====

Railsのインストールなど

http://www.rubylife.jp/railsinstall/rails/index1.html

$ gem install rdoc
$ gem install bundle
$ gem install rails

 

====

Apacheのインストールと自動起動の設定
http://live-cast.asia/blog/2010/10/amazon-ec2-for-setting-up-the-apache-micro-instances.html

$ sudo yum install httpd
$ sudo chkconfig httpd on

Apache起動
$ sudo service httpd start

 

====

FTPのセットアップ
http://dev.classmethod.jp/cloud/amazon-ec2-apache-ftp-setup/

$ sudo su
# yum install vsftpd
# vim /etc/vsftpd/vsftpd.conf

 

編集箇所

anonymous_enable=NO
ascii_upload_enable=YES(先頭の#を削除)
ascii_download_enable=YES(先頭の#を削除)


以下の行を追加

use_localtime=YES
force_dot_files=YES
pasv_min_port=60000
pasv_max_port=61000
pasv_address=xxx.xxx.xxx.xxx(Elastic IPアドレスを指定)

 

FTPの起動と、自動起動設定

# service vsftpd start
# chkconfig vsftpd on

 

MacPortとRVMをやめて、Homebrewとrbenvにする

http://ikeay.net/182によくまとまってます。えらい。

 

▼ MacPortのアンインストール

MacPortのアンインストール

$ sudo port -fp uninstall installed

sudo rm -rf
/opt/local
/Applications/DarwinPorts
/Applications/MacPorts
/Library/LaunchDaemons/org.macports.*
/Library/Receipts/DarwinPorts*.pkg
/Library/Receipts/MacPorts*.pkg
/Library/StartupItems/DarwinPortsStartup
/Library/Tcl/darwinports1.0
/Library/Tcl/macports1.0
~/.macports

参考: Chapter 2. Installing MacPorts | 2.5. Uninstall

 

▼ RVMのアンインストール

$ rvm seppuku
$ rm -rf ~/.rvm

.bash_profile
.bashrc
.zprofile
の中から、MacPortsっぽい記述、RVMっぽい記述は削除

 

▼ rbenvのインストール

$ brew install openssl

※ openssl.orgが落ちている時は…
FIX: Error: Download failed: http://openssl.org/source/openssl…

$ brew install readline

$ brew link openssl
$ brew link readline

$ brew install rbenv
$ brew install ruby-build

.bashrc, .bash_profileに

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

を追加。

.zprofileに

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init - zsh)"

を追加。(引数にzshって入ってます!)

参考: Learn Ruby – Install – kidomahの日記

 

ruby -v

して、指定したrubyのバージョンが出ればOK。

 

▼ rbenvを使う

$ rbenv install 1.9.3-p392
$ rbenv global 1.9.3-p392

 

▼ bundlerとか (13/4/17 追記)

$ rbenv rehash
$ gem install bundler
$ rbenv rehash

$ which gem
$ which bundle

これでbundlerがちゃんとrbenv環境に向いているか確認。

rvmからrbenvへ移行したらbundle installに失敗した。 #Ruby #bundler – Qiita [キータ]


その他のコマンド

・インストールできるもの一覧

$ rbenv install --list

・インストールしているバージョン一覧

$ rbenv versions

・今使ってるバージョン

$ rbenv version

・(****は任意のバージョン)デフォルトのバージョンを指定

$ rbenv global ******

・インストールしたrubyやgemのパスを通す

$ rbenv rehash

参考: Rubyのバージョン管理システムをrbenvにした

~/.bashrc が読まれていない問題

たぶん、このエントリーでrvmをインストールしたんだけれど、
Macを再起動すると、rvmコマンドが使えなくなって、ruby -v しても1.8系に戻ってしまう。

 

./bashrc が読まれていなかったみたいで、ターミナルから

$ source ~/.bashrc

をすれば、パスが通って解決するけど、毎回はめんどうなので、
~/.bash_profile から ~/.bashrc を読み込もう、という設定をする。

 

~/.bash_profileに、

if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi

を書き込む。

 

参考:
とあるプログラマーの覚書 OSXでのbashrcの設定
bashの設定ファイルの読み込みが複雑すぎて混乱する – ぱせらんメモ

Rails 3.2.3 を Heroku で

1.

Rubyのバージョン確認

$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.3.0]

Railsのバージョン確認

$ rails -v
Rails 3.2.3

参考: 【番外編】Ruby on Railsでのアプリ開発の基本 – Facebook開発者の為のサポートサイト | fb.developers’+
http://fb.dev-plus.jp/column1/column1_ruby/

 

2.

LionのデフォルトのRubyは1.8.7 なので、
1.9.3を使うために、RVMをインストール。

$ git clone --depth 1 git://github.com/wayneeseguin/rvm.git
$ cd rvm
$ ./install

 

3.

RVMを使うために、~/.bashrc に追記。

$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bashrc

設定が完了したら、「$ source ~/.bashrc」か 再ログイン で設定を読み込む。

$ rvm -v
rvm 1.13.0 () by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

 

4.

1.9.3をインストール

$ rvm install 1.9.3

インストールされているバージョンの一覧

$ rvm list

1.9.3を使用

$ rvm use 1.9.3

1.9.3を初期設定に

$ rvm --default 1.9.3

改めて、$ rvm list の結果

rvm rubies

ruby-1.9.2-p320 [ x86_64 ]
=* ruby-1.9.3-p194 [ x86_64 ]
# => - current
# =* - current && default
#  * - default

参考: Mac に rvm をインストールして 複数バージョンの Ruby を使う – hogehoge foobar Blog Style5
http://d.hatena.ne.jp/mrgoofy33/20110518/1305649544

 

5.

その他、必要に応じて…

gemのインストール

$ sudo port install rb-rubygems

railsのインストール

$ gem install rails

バージョンの確認

$ rails -v

 

6.

Railsアプリを作る場所へ移動

$ cd

アプリ「myapp」を作成

$ rails new myapp

アプリの中に移動

$ cd myapp

Herokuで動かすために「myapp/Gemfile」のgem ‘sqlite3’ を

group :production do
gem 'pg'
end
group :development, :test do
gem 'sqlite3'
end
[code]

に書き換える。

ローカル環境の再インストール
$ bundle install

参考: Rails 3.1 を Heroku (Cedar) にデプロイする – Rails 3.0 on Heroku Bamboo からの変更点 : : lefthandz.org
<a href="http://aws.lefthandz.org/wordpress/2012/01/deploy-rails-3-1-on-heroku-cedar/ " target="_blank">http://aws.lefthandz.org/wordpress/2012/01/deploy-rails-3-1-on-heroku-cedar/</a>

&nbsp;

7.

データベースのテーブル作成

[code]
$ rails g scaffold note body:text title:string
$ rake db:migrate

ローカルのRailsを起動

$ rails s

http://localhost:3000/notes をチェック

 

8.

Herokuにログイン

$ heroku login

※パスワードを毎回聞かれなくするには
公開鍵/秘密鍵の設定

$ heroku keys:add

参考: Ruby1.9.3 + Rails3.2.1セットアップ – I can’t change the world.
http://change-the-world.heroku.com/19

 

9.

Gitの管理下に

$ git init
$ git add .
$ git commit -m "init"

Heroku上にアプリを作成

$ heroku create --stack cedar
or
$ heroku create --stack cedar アプリ名

Herokuにリリース

$ git push heroku master
$ heroku rake db:migrate
$ heroku open

http://アプリ名.herokuapp.com/notes で確認