はじめに
本記事は、Redmine Advent Calendar 2021の12/2の記事です。
Qiitaには過去にRedmine2.5やRedmine3.0系をHerokuで構築する記事がありましたが、どうせならRedMica2.0を使ってみたいので、過去記事を参考に試行錯誤した結果、動作するようになりましたので紹介させていただきます。
Herokuとは
セールスフォース・ドットコムが開発と運営を行っているPaaS(Platform as a Service)です。詳細はいろいろなところで紹介されていますので割愛いたします。
RedMicaとは
ファーエンド・テクノロジー(株)が提供しているRedmine互換のOSSです。RedMica2.0はRedmine4.2.3をベースにして今後のRedmineに取り込まれる予定の機能を先行提供されています。(Redmineの機能を先取りしてリリースされているそうです)
前提条件
Windows10のPCを構築用に使います。(その他の環境でも同様のことはできるはずとおもいますが試してません。)
事前準備
Herokuにユーザ登録・Heroku CLIのインストール
詳細は割愛します。以下のBLOGなどを参照してユーザ登録、Heroku CLIのインストールを済ませておいてください。
その他の構築PC側準備
- git clientがインストールされていること。まだの方はこちらからインストールしてください。
- PostgreSQLがインストールされていること。Herokuで現時点でサポートされているPostgreSQLの最新バージョンは12ですので、構築用PCにも12の最新版をインストールします。まだの方はこちらからインストールしてください。(構築用PCでbundle installする際に、pg_config.exeというプログラムが必要で、そのためだけにインストールしています。実際に構築用PCでPostgreSQLサーバを動かすわけではありません)
- Ruby+devkitがインストールされていること。まだの方はこちらからインストールしてください。
- (任意)作業をするのにVS Codeがあると便利です。インストールする方はこちらから。詳細は割愛させていただきます。
構築手順
RedMicaのソースをgit cloneする
Heroku用アプリケーションを作成するフォルダを任意の場所に作成し、git bashでそのディレクトリに移動します。そこで、以下のコマンドでgit cloneします。cloneしたら、そのディレクトリに移動します。クローンするフォルダ名は任意です。(後でHerokuにアップする時のアプリケーション名と合わせた方がわかりやすいでしょう)
$ git clone https://github.com/redmica/redmica.git redmica2
$ cd redmica2
ちなみにここでオリジナルのRedmineのリポジトリhttps://github.com/redmine/redmine.git
をクローンすればRedMicaではなくRedmineになります
cloneしたファイルの編集
.gitignoreの編集
.gitignoreから以下の行頭に#を追加してコメント化
/config/configuration.yml
/config/email.yml
/config/initializers/session_store.rb
/config/initializers/secret_token.rb
/public/plugin_assets
/Gemfile.lock
/Gemfile.local
.gitignoreに以下を追加する
/vendor/bundle
Gemfileの編集
参考記事には、Gemfileにrubyのバージョンを2.2に指定する記述がありますがここでは実施しません。(もともとruby '>= 2.5.0', '< 3.1.0'
と指定されています)
Gemfileから以下の部分を削除する
# Include database gems for the adapters found in the database
# configuration file
require 'erb'
require 'yaml'
database_file = File.join(File.dirname(__FILE__), "config/database.yml")
if File.exist?(database_file)
yaml_config = ERB.new(IO.read(database_file)).result
database_config = YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(yaml_config) : YAML.load(yaml_config)
adapters = database_config.values.map {|c| c['adapter']}.compact.uniq
if adapters.any?
adapters.each do |adapter|
case adapter
when 'mysql2'
gem "mysql2", "~> 0.5.0", :platforms => [:mri, :mingw, :x64_mingw]
when /postgresql/
gem "pg", "~> 1.2.2", :platforms => [:mri, :mingw, :x64_mingw]
when /sqlite3/
gem "sqlite3", "~> 1.4.0", :platforms => [:mri, :mingw, :x64_mingw]
when /sqlserver/
gem "tiny_tds", "~> 2.1.2", :platforms => [:mri, :mingw, :x64_mingw]
gem "activerecord-sqlserver-adapter", "~> 6.1.0", :platforms => [:mri, :mingw, :x64_mingw]
else
warn("Unknown database adapter `#{adapter}` found in config/database.yml, use Gemfile.local to load your own database gems")
end
end
else
warn("No adapter found in config/database.yml, please configure it first")
end
else
warn("Please configure your config/database.yml first")
end
削除した部分に以下を追加する
group :production do
gem "pg", ">= 0.11.0", :platforms => [:mri, :mingw, :x64_mingw]
gem 'rails_12factor'
gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
gem 'rexml', '~> 3.2', '>= 3.2.4'
gem 'puma'
end
config/application.rbを編集する
# require 'sprockets/railtie'
の行頭の#を消してコメントアウトを解除します
require 'sprockets/railtie'
また、以下を追加します。私はconfig.log_levelを設定しているところの下に追加しました。
config.assets.initialize_on_precompile = false
app/assets/config/manifest.jsを作成する
app/assets/configフォルダを作成します。その下に、manifest.jsというファイルを以下の内容で作成します。
//= link_tree ../../../public/images
//= link_directory ../../../public/javascripts .js
//= link_directory ../../../public/stylesheets .css
Gemをインストール
bundleのオプション設定
以下のコマンドを投入します。
(先にインストールしたPostgreSQLで、pg_config.exeというファイルがC:\Program Files\PostgreSQL\12\bin\
にある想定です。パスが違う場合は適宜読み替えてください。)
$ bundle config set --local path 'vendor/bundle'
$ bundle config set --local without 'development test rmagick'
$ bundle config set --local build__pg "--with-pg-config='C:\Program Files\PostgreSQL\12\bin\pg_config.exe'"
bundle install実行
bundle installを実行します。
$ bundle install
ローカルのgitリポジトリにコミット
以下ではコメントをRedmica for Heroku
としていますが、コメントは編集した内容に合わせて変更してください。
$ git add .
$ git commit -am "Redmica for Heroku"
heroku側の作業
herokuにログイン
以下のコマンドをうつと、ブラウザが起動し、二要素認証後にログイン完了します。
$ heroku login
herokuアプリケーションを作成
<app_name>
はユニークなアプリケーション名である必要があります。ここで作成したアプリケーション名は、後々使うURLの一部になりますので、わかりやすい名前をつけましょう。(私はredmica2
にしました)
$ heroku create <app_name>
herokuアプリケーションにPostgreSQLのアドオンを追加
$ heroku addons:add heroku-postgresql
herokuにpush(アップロード)
$ git push heroku master
herokuでDBのマイグレーションを実施
$ heroku run rake db:migrate RAILS_ENV=production
herokuでDBの初期データを読み込み
$ heroku run rake redmine:load_default_data RAILS_ENV=production
Select language: ar, az, bg,...
のように言語を選択するように表示されます。単にリターンを入力するとen
(英語)になりますので、ja
(日本語)を入力します。
動作確認
ブラウザから動作を確認してみましょう。Herokuアプリケーションを作るときに指定した<app_name>
によって、https://<app_name>.herokuapp.com
にアクセスするとRedMicaの初期画面が起動します。
admin/adminでログインするとパスワード変更画面になるので管理者用パスワードを入力してください。
これでHerokuサービス上でRedMicaを起動することができました。
留意事項
ここまでの手順で、まずはRedMicaをHerokuで立ち上げているだけです。以下のような制約にご留意ください。
- メールサーバの設定を行っていないので、メール通知をすることはできません。
- ファイルの添付は、一見問題なく動作しますが、永続化の設定をしていないので、HerokuのDynoが再起動されるとなくなってしまいます。(HerokuのWeb Dynoは1日に1回は再起動されるそうです)
- リポジトリの設定を行っていないので、リポジトリは使えません。
- その他、全機能を確認したわけではないので、動かない機能があるかもしれません。
参考記事