« AGESTOCK2011を見てきました。 | ホーム | lessを使い始めました。(CSS拡張メタ言語) »

2011年10月30日

Heroku上にredmine(1.2.1)を構築してみた。

個人的にredmineを使ってのプロジェクト管理について興味を持ったので、Heroku上に構築してみることにしました。
Ruby on Railsの知識は皆無でしたが、色々と調べるなどして無事にDeployすることができました。

http://d.hatena.ne.jp/alpha_neet/20111027/1319748428を大変参考にさせていただきました。この場を借りて感謝します。。。

環境など

  • Mac OS X 10.6.8
  • ruby 1.8.7
  • redmine 1.2.1
  • gem 1.3.7
  • rails 2.3.11

rvmのインストール|複数のバージョンのrubyを管理する。

redmineでは、最新バージョンよりも少し古いRubyを使用しないと上手くいかないということでした。
そこで、rvm(Ruby Version Manager)を使って、複数のバージョンのrubyを用途に合わせて使用できる環境を作ります。

rvmのサイト(http://beginrescueend.com/)にアクセスしてみると、rvmの導入方法が書かれていました。
説明の通りにターミナルを使って、
bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
を実行すると、インストールされます。

これによって、ターミナルで[rvm]コマンドが使えるようになる!・・・と思いきや、上手く動作しなかったので、ターミナルに以下を打ち込んで実行します。
echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile
さらに続けて以下も実行。
source .bash_profile
これで、やっとのこさrvmコマンドが使えるようになりました。
果たして本当に使えるのか?を確かめるためには、ターミナルで以下のコマンドを実行すればわかります。
type rvm | head -1
=>「rvm is a function」とでれば、無事にrvmが使えるということです!

Rubyのインストール|rvmを使ってRubyをインストールする。

いよいよ、rvmを使って、Rubyを導入します。ここではRubyの1.8.7バージョンを使うので、ターミナルで実行するrvmコマンドは以下になります。
rvm install 1.8.7
ダウンロード、インストールには多少の時間が必要となります。気長に待ちましょう★

無事に完了したら、PCにdefaultで使うRubyのバージョンを指定しておきます。これにもrvmコマンドを使います。引き続きターミナルで以下を実行してください。
rvm --default use 1.8.7
これで、使用するバージョンの指定は完了。

RubyGemsのバージョンを変更する|Ruby言語用のパッケージ管理システム

Rubyをインストールすると、自動でRubyGemsというものも導入されています。
Rubyを使い倒すために便利なライブラリやツール群を簡単にインストールや利用、管理してくれるのが、このRubyGemsです。
正式名はRubyGemsですが、基本的には「gem」と呼ばれます。現在(2011/10/30)の最新バージョンは1.8.10なんですが、ここでは1.3.7を使用します。
ターミナルで以下を実行すると、gemのバージョンを確認することが出来ます。
gem -v
自分の場合は、「1.8.10」と出てきてしまい、1.3.7ではなかったため、バージョンを変えないと行けませんでした。
RubyGemsをバージョンダウンするためには、gemを使って「rubygems-update」をインストールしなくてはなりません。以下をターミナルで実行して、このrubygems-updateをインストールします。
gem install -v 1.3.7 rubygems-update
これで、rubygems-updateを使用できます。「-v 1.3.7」で、ダウンしたいgemのバージョンを指定します。
つづいて、rubygems-updateのコマンド「update_rubygems」を使って、gemのバージョンをダウンします。
update_rubygems
ちゃんとgemのバージョンがダウンしたかどうかを、改めて確認します。
gem -v
「1.3.7」と表示されたので、僕の場合はOKでしたが、ここで躓くことがよくあるようです。。。

rails、sqlite3をインストールする

着々と環境が整ってきました。
次にローカルPCへの作業環境の整備とrailsのインストールを行います。
私の場合は、以下の場所に「workspace」というディレクトリを作成し、その中にアプリケーションを入れていくことにしました。

workspace.png
作業環境スペースの例

上記の画像はあくまでも例なので、都合の良い場所にディレクトリを作成すればよいと思います。
それでは、ターミナルを使ってディレクトリを作り、そのディレクトリに入ります。
mkdir workspace
cd workspace
「workspace」ディレクトリに入ったら、次にRailsをインストールします。今回はRailsのバージョンを2.3.11に指定したいので、2.3.11バージョンを指定する形でインストールします。以下をターミナルで実行してください。
gem install rails -v=2.3.11
これで、railsがインストールされました。続いて、データベースに使うsqlite3もインストールします。
gem install sqlite3-ruby
sqliteは、MySQLと同様のデータベース管理システムで、小規模のアプリケーションには十分なものです。
もちろんMySQLも使うことが出来ます。(ここでは、MySQLは使用しませんが・・・)

redmineを作業ディレクトリに入れる。

続いて、redmineをダウンロードしてローカルディレクトリに入れます。
私の場合は、「workspace」ディレクトリの中に個人「projects」ディレクトリを作成し、その中にダウンロードしたzipファイルを入れました。
redmineのzipファイルは下記にアクセスすることで手に入れることが出来ます。

http://rubyforge.org/frs/download.php/75099/redmine-1.2.1.zip

ダウンロードしたファイルをその場所で解凍しておきます。「redmine-1.2.1」という名前のディレクトリができると思います。

database.ymlの設定を行う。

次に、[redmine1.2.1/config/database.yml]にある、database.ymlファイルの中身を編集します。
先ほどsqlite3をインストールしたので、sqlite3を使う旨を設定としてこのdatabase.ymlに書き込みます。
production:
  adapter: sqlite3
  database: db/production.sqlite3

development:
  adapter: sqlite3
  database: db/development.sqlite3

test:
  adapter: sqlite3
  database: db/test.sqlite3
このdatabase.ymlは、Railsアプリにおいてデータベースを設定するためのファイルです。
「production(本番用)」「development(開発用)」、「test(テスト用)」の3種類の設定ができ、実行モードを変えることで、それぞれの設定を切り替えて使うことができます。上記の用に書けば、sqlite3を用いる際の設定としては問題ありません。

bundle installコマンドを使う

Railsではbundle installコマンドを使うことでプロジェクトで必要とされるモジュールを一括でインストールすることができます。
このbundle installコマンドを使うためには、予め以下を実行する必要があります。
gem install bundle
bundle installコマンドでインストールしたいものは、プロジェクトディレクトリの中に「Gemfile」という名前のファイルを作り、編集する必要があります。
以下を実行してGemfileを作り、ターミナル上で編集しましょう。
vim Gemfile
Gemfileに書き込む内容は以下になります。
source 'http://rubygems.org'

gem 'rails', '2.3.11'
gem 'i18n', '0.4.2'
gem 'rubytree'
gem 'coderay', '~>0.9.7'
Gemfileが整った状態で、ターミナルでbundle installコマンドを実行します。
bundle install
どしどしとインストールされるはずです。。。

session_store.rb ファイルを生成する

redmineでセッションデータを安全に扱うための秘密鍵が含まれる config/initializers/session_store.rb ファイルを生成します。
ターミナルで以下を実行して下さい。
rake generate_session_store
これでconfig/initializers/session_store.rb が出来ているはずです。

データベースの更新作業を行う

先ほど設定したデータを基に、データベースの更新作業を行います。以下をターミナルで実行してください。
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data
実行をすると、
Select language: bg, bs, ca, cs, da, de, el, en, en-GB, es, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en]
と問われるので、「ja」と答えます。ここで、使用言語を設定することになります。

この操作では、database.ymlにおけるproductionの設定に基づいてデータベースを更新しています。
redmine:load_default_dataと指定することで、デフォルトの内容をある程度揃えてデータベースを設定してくれます。

ローカル上で実行してみよう!

いよいよredmineをローカル上で実行してみます。起動させるには、以下のコマンドを使用します。
ruby script/server webrick -e production
私の場合は、「http://0.0.0.0:3000」にアクセスすればローカルでredmineを動かすことが出来ました!やった!
スクリーンショット(2011-11-01 22.07.53).png

Herokuにデプロイするための準備

Herokuにredmineをあげるために、redmine内のファイル構成をいくつか編集する必要があります。
以下のコマンドを実行して、必要となるディレクトリを作成します。
mkdir tmp/files
mkdir tmp/plugin_assets
さらに作成したディレクトリ内が空であると、gitが上手く機能しないため、dummyファイルを作っておきます。
touch tmp/files/dummy
touch tmp/plugin_assets/dummy

続いて、何個かのファイルをガリガリ編集します。ターミナル上で編集してもよいんですが、私は慣れているエディタで直接編集しました。
lib/redmine/menu_manager.rbを編集
「@last_items_count = 0」の下に、「@childrenHash ||= {}」を追加する。
@last_items_count = 0
@childrenHash ||= {}
lib/redmine/menu_manager.rb内

app/models/attachment.rbを編集
「@@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{RAILS_ROOT}/files"」を書き換える。
@@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{RAILS_ROOT}/files"
@@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{RAILS_ROOT}/tmp/files"
app/models/attachment.rb内

vendor/plugins/engines/lib/engines.rbを編集
「self.public_directory = File.join(RAILS_ROOT, 'public', 'plugin_assets')」を書き換える。
self.public_directory = File.join(RAILS_ROOT, 'public', 'plugin_assets')
self.public_directory = File.join(RAILS_ROOT, 'tmp', 'plugin_assets')
vendor/plugins/engines/lib/engines.rb内

config/environment.rbを編集
「Rails::Initializer.run do |config|」の下にいくつか追加する。
Rails::Initializer.run do |config|
 config.action_controller.session = { 
    :key => "_myapp_session", 
    :secret => "適当な文字列" 
}
config/environment.rb内

.gitignoreを編集
「.gitignore」を以下の内容にする
/.project
/.loadpath
/config/additional_environment.rb
/config/configuration.yml
/config/database.yml
/config/email.yml
/config/initializers/session_store.rb
/coverage
/db/*.db
/db/schema.rb
/files/*
/lib/redmine/scm/adapters/mercurial/redminehelper.pyc
/lib/redmine/scm/adapters/mercurial/redminehelper.pyo
/log/*.log*
/log/mongrel_debug
/public/dispatch.*
/public/plugin_assets
/tmp/cache/*
/tmp/sessions/*
/tmp/sockets/*
/tmp/test/*
/vendor/rails
*.rbc
.gitignore内

heroku上にアプリをつくる

gem install heroku
git init
heroku create 'プロジェクトの名前'
加えて、heroku上のrubyのバージョンも設定しておきます。
heroku stack
heroku stack:migrate bamboo-ree-1.8.7

いよいよheroku上にコミット!!

git add .
git commit -m 'first commit'
git push heroku master
heroku rake db:migrate
これでやっとのこさ、heroku上にredmineが置けました。
ターミナル上で、
heroku open
と実行すれば既定のブラウザでアクセスできます。

プロジェクトマネジメントにredmineがどのくらい使えるかはわかりませんが、無事にredmineを使える状態になりホットしました。
OpenID対応しています OpenIDについて

このブログ記事について

このページは、HAKASHUNが2011年10月30日 21:43に書いたブログ記事です。

ひとつ前のブログ記事は「AGESTOCK2011を見てきました。」です。

次のブログ記事は「lessを使い始めました。(CSS拡張メタ言語)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。