WindowsでRails (ThinをWindowsサービスとして動かす)

はじめに.
某件でWindows上でRailsアプリをバックグラウンドプロセスで起動させる必要があったので、その実現までの履歴を残しています。
試したOSはWindows7Windows Server 2008 R2 の2種類のみ。
.NET4.0が既にインストールされていることを確認してください。
 
1.Ruby1.9.3 をインストール
http://rubyinstaller.org/downloads/
上記サイトでWindows用のRuby1.9.3インストーラーをダウンロード&実行。
 
Rubyの実行ファイルへの環境変数PATHを設定する」をチェックON

$ ruby -v
$ gem -v

バージョンが表示されていればOK。
 
2.Devkitをインストール
http://rubyinstaller.org/downloads/
「DevKit-tdm-32-***********.exe」をダウンロード
解凍フォルダを作成して解凍(ダウンロードしたEXE実行)
解凍ディレクトリにて以下を実行

$ ruby dk.rb init
$ ruby dk.rb install

 
3.RubyGemsを最新アップデート

$ gem update --system

 
4.Rails、Thinインストール

$ gem install rails -v 3.2.13
$ gem install thin

 
5.Git for Windows をインストール
※5.〜8.はGit関連なので不要であれば9.までジャンプしてください。

http://msysgit.github.io/
上記サイトから「Download」リンククリックし、最新のインストーラーEXEをダウンロード&実行。
インストール途中、以下の画面のみ注意。
「Git Bash」「 Git GUI」をチェックON

 
「Run Git from the Windows Command Prompt」をチェックON

 
6.Git Bash で認証鍵を生成

$ ssh-keygen.exe -t rsa

生成された鍵情報をGitLab(or GitHub)に登録
 
7.hostsファイルにGitLabホストを登録(GitHubの場合は不要)
 
8.GitクローンでRailsアプリを取得

$ git clone git@gitlabhost:railsapp.git

 
9.Railsアプリのセットアップ
Rails.Rootにて
Gemfileに「thin」が記載されていることを確認のうえ、

$ bundle install
$ rake db:migrate

 
10.Rails起動

$ rails s
=> Booting Thin
=> Rails 3.2.13 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop

とThinでRailsが起動されていればOK。

以下のコマンドでも起動確認。(Rubyのbinディレクトリにて)

$ ruby.exe thin -e development -p 3000 -c {Rails.Root} start

 
11.RailsWindowsサービスとしてインストール
「ThinServiceManager.zip」を任意ディレクトリに解凍
https://github.com/tokumura/thin_service_manager

「ThinServiceManager.exe」を実行
各項目を設定(Rubyパス、Thinパス、Railsルートパス、Rialsポート」
「インストール」でサービスインストール
「サービスマネージャー」で「Thin_service」があることを確認。
「Thin_service」サービス起動後、netstatでListen確認。
ブラウザで「localhost:[port]」をアクセスできることを確認。
 
余談.
Railsインストールの段階でバージョンを指定しなかったため、最新の4.0.0が入ってしまった。
その影響で bundle install した際に依存したGemが入ってしまい、Railsを正常に起動するまで色々と手間取った。
※4.0.0を削除して必要だった3.2.13を入れた後に苦労した。
 
まず rails -v で消したはずの4.0.0が表示されてしまう。
以下で解決

$ gem uninstall railties

削除候補が複数出たら4.0.0を削除
※railsties とタイプミスしないように。「rails」ではなく「rail」
 
次にrack。thinでrails起動の際に以下のようなエラーが表示。
"you have already activated rack 1.5.2 but your Gemfile requires rack 1.4.5"

$ gem uninstall rack

削除候補が複数出たら1.5.2を削除
 
最後に jquery-rails
ブラウザでアクセスした際、Railsが以下のようなエラーを表示。
"couldn't find file 'jquery-ui'"
これもやはり jquery-rails が新しすぎたためにでた模様。(rails4.0.0を入れたばっかりに)

$ gem uninstall jquery-rails

削除候補が複数出たら3.*.*を削除
 
以上を行ったうえで、Gemfile.lockの内容をクリアして bundle install。
Rails4を入れてしまったことで色々と躓いたが、勉強になった。

Ubuntu12.04 に VirtualBox をインストール

■ /etc/apt/sources.list に追記
以下に掲載されているいずれかのURLを追記
https://www.virtualbox.org/wiki/Linux_Downloads

deb http://download.virtualbox.org/virtualbox/debian precise contrib

■ 公開鍵を取得
以下に掲載されている公開鍵(oracle_vbox.asc)をダウンロード後、インストール
https://www.virtualbox.org/wiki/Linux_Downloads

$ sudo apt-key add oracle_vbox.asc

■ packageリスト更新

$ sudo apt-get update

■ apt-getでインストール

$ sudo apt-get install virtualbox-4.2

GitLab 導入記録

■環境
Ubuntu Desktop 12.04 (日本語Remix vhd)
・OpenSSL, OpenSSH インストール済み

Ruby、RVM、Railsをインストール
http://d.hatena.ne.jp/qkrhn081/20121030/1351580476

■GitLab
以下の手順を忠実に実行
https://github.com/gitlabhq/gitlabhq/blob/5-0-stable/doc/install/installation.md

■Jenkins
http://d.hatena.ne.jp/qkrhn081/20120525/1337924233

■GitLab - Jenkins連携
以下を参考に実施。(ユーザー名、リポジトリ名などは読み替えること)
http://d.hatena.ne.jp/katsuren/20121031/1351660354

■Pivotal Tracker, Jenkins とのHook設定 (GitLab push時)
以下を参考に、対象プロジェクトリポジトリ内の post-receive に Hookスクリプトを記述。
https://github.com/tokumura/post-receive/blob/master/post-receive

■注意点

Railsインストールで"file 'lib' not"とかがでたら以下を一発。

$ sudo gem install rdoc

もしくは

$ sudo gem install rails --no-ri --no-rdoc


・インストール後、GitLabにアクセスしてSSH-Keyを登録しておくこと(とくにJenkinsユーザー)
 "can't be established. ECDSA key fingerprint is" で登録できない場合、公開鍵のコピペがうまくいっていないだけの可能性あり。

・Jenkinsユーザーにパスワードセットすること。

$ sudo passwd jenkins

・Jenkinsユーザーで git config --global user.name と user.email をたたいておくこと。

$ git config --global user.name "Your Name"
$ git config --global user.name "yourmail@your.domain.co.jp"

・Jenkinsユーザーで bundle install の際、パスワードを聞かれたら以下を一発。

$ sudo addgroup admin
$ sudo usermod -G admin jenkins

Railsインストール Ubuntu 12.04

※すべて$HOMEディレクトリで実行

Ruby(一旦1.8), Gem, RVMのインストール

$ sudo apt-get install zlib1g-dev
$ sudo apt-get install libssl-dev
$ sudo apt-get install sqlite3 libsqlite3-dev
$ sudo apt-get install libxml2-dev
$ sudo apt-get install libxslt1-dev
$ sudo apt-get install libyaml-dev
$ sudo apt-get install libpq-dev
$ sudo apt-get install ruby
$ sudo apt-get install rubygems
$ sudo gem install rubygems-update
$ curl -L get.rvm.io | bash -s stable --auto
$ vi .bashrc
(末尾に以下を追記)
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
$ source .bashrc
$ type rvm | head -1
(「rvm は関数です」とか表示されていればOK)

Ruby1.9.2のインストール

$ rvm install 1.9.3
(5分ほどかかる)
$ rvm 1.9.3 --default
$ ruby -v
(「ruby 1.9.3p〜」と出ていればOK)

Railsのインストール(投稿時の最新バージョン:3.2)

$ gem install rails
$ rails -v
(バージョンが表示されていればOK)

■その他
rails generate ができなかった → Gemfile に 'therubyracer' を追加して bundle install で解決

Rails + Devise で認証機能を作成(カスタマイズあり)

やりたいこと
・認証機能がほしい
・deviseデフォルトのメールアドレスではなく、ユーザー名での認証がしたい
 ※パスワードを忘れた場合のメール送信とかはいらない
・管理者ユーザーと一般ユーザーを使い分けたい

バージョン
ruby 1.9.3p194
rails 3.2.8
devise 1.5.5

はじめに
■deviseをインストール&初期セット

$ vi Gemfile

gem 'devise', '1.5.5'

$ bundle install
$ rails g devise:install
$ rails g devise User
$ rails g devise:views
$ rake db:migrate
$ mv public/index.html public/index.html.org

ユーザー名で認証を行う
■メールアドレス→ユーザー名での認証に変更

$ rails g migration add_username_to_users username:string
$ rake db:migrate
$ vi app/models/user.rb

# :username を追加
attr_accessible :email, :password, :password_confirmation, :remember_me, :username
 
# email_required? メソッドを追加
def email_required?
 false
end

$ vi app/views/devise/sessions/new.html.erb
$ vi app/views/devise/registrations/edit.html.erb
$ vi app/views/devise/registrations/new.html.erb
※全て同じ修正

<div><%= f.label :email %><br />
<%= f.email_field :email %></div>

↓下記のとおり修正

<div><%= f.label :username %><br />
<%= f.text_field :username %></div>

■Userテーブルをマイグレート
$ rails g migration change_column_email_to_null_false

def self.up
 change_column :users, :email, :string, :null => false
end
 
def self.down
 change_column :users, :email, :string, :null => true
end

$ rails g migration change_index_from_email_to_username_on_users

def self.up
 remove_index :users, :email
 add_index :users, :username
end
 
def self.down
 add_index :users, :email
 remove_index :users, :username
end

■ config/initializers/devise.rb を修正
修正前(コメントアウトされている)

# config.authentication_keys = [ :email }

修正後(コメントイン & username に修正)

config.authentication_keys = [ :username }

管理者権限の追加

■Userテーブルをマイグレート(admin:booleanを追加)
$ rails g migration add_admin_to_users admin:boolean
$ rake db:migrate

■Usersコントローラーを作成
$ rails g controller users
$ vi config/routes.rb

 # devise_for :users を修正
 devise_for :user

■UsersコントローラーにCRUDメソッドを一通りそろえる。

■Usersコントローラーに管理者権限追加、削除メソッドを追加

def make_admin
 user = User.find(params[:id])
 user.update_attribute :admin, true
 redirect_to users_path
end

def remove_admin
  user = User.find(params[:id])
 user.update_attribute :admin, false
 redirect_to users_path
end

その他

■Welcomeコントローラーを作成
※サインインページにリダイレクトさせるコントローラー
$ rails g controller welcome
$ vi app/welcome_controller.rb

class WelcomeController < ApplicationController
 def index
  redirect_to new_user_session_path
 end
end

■config/routes.rb に追記

 # 認証後のトップページを指定
 # welcomeコントローラーを作成してサインインページにリダイレクトさせる
 root :to => 'welcome#index'
 resources :welcome, :only => [ 'index' ]
 get 'portal', :to => 'portal#index', :as => :user_root  # 'portal'はログイン後に表示させたいリソース名

Vim で Rails 開発環境を構築 (自分好み)

OS:Ubuntu 12.04 Desktop 64bit(VirutalBox)

■いれるもの
vim
rails.vim
NERDTree

vim(一応書いとく)

$ sudo apt-get install vim
$ cd ~
$ mkdir .vim

rails.vim
http://www.vim.org/scripts/script.php?script_id=1567
で最新ダウンロード、解凍後、doc/ plugin/ autoload/ を .vim/ に移動

■NERDTree
http://www.vim.org/scripts/download_script.php?src_id=11834
でダウンロード、解凍後、doc/ plugin/ nerdtree_plugin/ を .vim/ に移動

ディレクトリの配色(紫)が見にくかったので配色を変更(青)

$ cd ~
$ touch .vimrc
$ vi .vimrc

:hi Directory guifg=#00FF00 ctermfg=blue