redmine2.0.1のherokuへの移行を断念するまで

さくらVPSで回していたredmineをherokuに移行させたら安くつくんじゃないかと思い、試してみました。結果問題が発覚して断念しましたので、その経緯をまとめておこうと思います。

 

db:push

まずherokuにアプリケーションを作成して、postgresqlアドオンを追加します。

# heroku create asanoboy-redmine
# heroku addons:add heroku-postgresql:dev
Adding heroku-postgresql:dev on asanoboy-redmine... done, v2 (free)
Attached as HEROKU_POSTGRESQL_AQUA_URL
Database has been created and is available
Use `heroku addons:docs heroku-postgresql:dev` to view documentation.

これでHEROKU_POSTGRESQL_AQUA_URLという環境変数PostgreSQLのURLが設定されました、heroku configで中身を確認可能です。これをpg:promoteします。

heroku pg:promote HEROKU_POSTGRESQL_AQUA_URL

次にさくらVPSのmysql上にあるデータをherokuのDBにコピーしますが、Ruby1.9.2のtapsを使わないと、heroku db:push したときに以下のエラーが出てうまくいきません。

Taps Server Error: PGError: ERROR: time zone displacement out of range:

以下がdb:pushまで

rvm use 1.9.2
gem install taps sqlite3 mysql
heroku db:push mysql://[username]:[password]@localhost/db_redmine --app asanoboy-redmine

アップロードの確認のため、アプリ名の再入力を求められるので、入力すればアップロードがスタートします。

users:         100% |==========================================| Time: 00:00:00
versions:      100% |==========================================| Time: 00:00:00
watchers:      100% |==========================================| Time: 00:00:00
wiki_content_: 100% |==========================================| Time: 00:00:00
wiki_contents: 100% |==========================================| Time: 00:00:00
wiki_pages:    100% |==========================================| Time: 00:00:00
wiki_redirect: 100% |==========================================| Time: 00:00:00
wikis:         100% |==========================================| Time: 00:00:00
workflows:     100% |==========================================| Time: 00:00:00
Resetting sequences
#

ここまで終了。

redmineのデプロイ

githubから落としてきたredmineではGemfile.lockが.gitignoreに含まれているので、外しておきます。

またGemfile内にsqlite3の記述をコメントアウトしておきます。 herokuではインストールできません。

  • Gemfile
#  group :sqlite do
#    gem "sqlite3"
#  end

Gemfile.lockを新しくしておきます。

# bundle install

次にconfig/enbironment.rbのexit 1をコメントアウトします。これは以下のソースを参考にしました。これしないとheroku側に怒られて、デプロイ後アプリがクラッシュします。

http://stackoverflow.com/questions/11444170/redmine-deploy-on-heroku-cedar

準備が出来たのでgit pushします。

# git add .
# git commit -m "hoge"
# git push heroku master:master
# heroku run rake assets:precompile
-----> Preparing app for Rails asset pipeline

辺りで何かエラーをはいてうまくいかない場合は、以下の記事を参考にprecompileの設定を追加して再度pushしてください。

http://codenote.net/heroku/1050.html

  • config/application.rb
config.assets.initialize_on_precompile = false

 

これでredmineがherokuで動き始めます。

が、アクセスしようとするとInternal Errorでredmineがうまく見れません。

ログを見るとsecret_token.rbがどうたら、で怒られます。

断念した理由

herokuではローカルディレクトリへのファイル書き込み権限はアプリケーション側にはありません。以下はredmineの.gitignoreですが、

https://github.com/edavis10/redmine/blob/master/.gitignore

secret_token.rb、session_store.rbなどはredmineが書き出すファイルで、herokuに持っていくなら予め別環境で作ってデプロイしないといけません。

redmineの中身まで掘り下げるのはコストは割に合わないと思い、断念しました。

 

この辺りのherokuとredmineの相性が改善される日まで、さくらVPSでいいやということになりました。それでも十分安いですからね。