sameersbn/redmine:4.1.0にEasy Ganttプラグイン(無料版)をインストール

ちょっとつまずいたので備忘録として投稿します。

まずは、プラグインをこちらからダウンロードします。
メールでダウンロードURLを教えてもらうんですが、何故か届かずメールアドレス変えたり英語版サイトでやったりしたら3回目でメール届きました。(笑

ではsameersbn/redmineを立ち上げてください。
いらないかもですが、docker-compose.ymlはこんな感じ。

version: '3'

services:
  redmine_postgresql:
    image: sameersbn/postgresql:9.6-4
    container_name: redmine_postgresql
    environment:
    - DB_USER=redmine
    - DB_PASS=password
    - DB_NAME=redmine_production
    volumes:
    - ./volumes/postgresql:/var/lib/postgresql

  redmine:
    image: sameersbn/redmine:4.1.0
    container_name: redmine
    depends_on:
    - redmine_postgresql
    environment:
    - TZ=Asia/Tokyo

    - DB_ADAPTER=postgresql
    - DB_HOST=redmine_postgresql
    - DB_PORT=5432
    - DB_USER=redmine
    - DB_PASS=password
    - DB_NAME=redmine_production

    - REDMINE_PORT=10083
    - REDMINE_HTTPS=false
    - REDMINE_RELATIVE_URL_ROOT=
    - REDMINE_SECRET_TOKEN=

    - REDMINE_SUDO_MODE_ENABLED=false
    - REDMINE_SUDO_MODE_TIMEOUT=15

    - REDMINE_CONCURRENT_UPLOADS=2

    - REDMINE_BACKUP_SCHEDULE=
    - REDMINE_BACKUP_EXPIRY=
    - REDMINE_BACKUP_TIME=

    - SMTP_ENABLED=false
    - SMTP_METHOD=smtp
    - SMTP_DOMAIN=www.example.com
    - SMTP_HOST=smtp.gmail.com
    - SMTP_PORT=587
    - SMTP_USER=mailer@example.com
    - SMTP_PASS=password
    - SMTP_STARTTLS=true
    - SMTP_AUTHENTICATION=:login

    - IMAP_ENABLED=false
    - IMAP_HOST=imap.gmail.com
    - IMAP_PORT=993
    - IMAP_USER=mailer@example.com
    - IMAP_PASS=password
    - IMAP_SSL=true
    - IMAP_INTERVAL=30

    ports:
    - "10083:80"
    volumes:
    - ./volumes/redmine:/home/redmine/data

無事起動できることが確認できたら、ダウンロードしたzipファイルにEasyGanttFree-4.x.zipが入っているので、その中身のeasy_ganttをフォルダごと、ボリュームで指定したpluginsフォルダに保存します。
(今回の例で言うと./volumes/redmine/plugins/ですね)

保存しましたらredmineコンテナを再起動します。

[centos@centos ~]$ docker restart redmine

これでプラグインはインストールできるはずなのですが、
開いてみるとInternal errorが発生してしまいました。
(その前にREST APIは有効にしといてくださいね)

easy_gantt_002.png

Redmineのproduction.logを確認すると以下のエラーが発生していました。
どうやらデータベースが作成できていない様子。

Completed 500 Internal Server Error in 60ms (ActiveRecord: 16.4ms)
  
ActionView::Template::Error (PG::UndefinedTable: ERROR:  relation "easy_settings" does not exist
LINE 8:                WHERE a.attrelid = '"easy_settings"'::regclas...
                                          ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                     pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
                     c.collname, col_description(a.attrelid, a.attnum) AS comment
                FROM pg_attribute a
                LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
                LEFT JOIN pg_type t ON a.atttypid = t.oid
                LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation
               WHERE a.attrelid = '"easy_settings"'::regclass
                 AND a.attnum > 0 AND NOT a.attisdropped
               ORDER BY a.attnum
):
    12:       nonWorkingWeekDays: EasyGantt.non_working_week_days,
    13:       holidays: [],
    14:       milestonePush: ((EasyGantt.easy_extensions? && !EasySetting.value('milestone_effective_date_from_issue_due_date')) ? true : false),
    15:       workDayDelays: EasySetting.value(:easy_gantt_relation_delay_in_workdays),
    16:       fixedRelations: false && EasySetting.value(:easy_gantt_fixed_delay),
    17:       defaultZoom: EasySetting.value(:easy_gantt_default_zoom),
    18:       paths: {
  

対処法としては、以下のコマンドでデータベースのマイグレーションができるようです。

[centos@centos ~]$ docker exec -it redmine bundle exec rake --trace db:migrate RAILS_ENV=production
** Invoke db:migrate (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Execute db:migrate
== 20150705172511 CreateEasySettings: migrating ===============================
-- table_exists?(:easy_settings)
   -> 0.0003s
-- create_table(:easy_settings, {:id=>:integer})
   -> 0.0052s
-- index_exists?(:easy_settings, [:name, :project_id], {:unique=>true, :name=>"index_easy_settings_on_name_and_project_id"})
   -> 0.0015s
-- add_index(:easy_settings, [:name, :project_id], {:unique=>true})
   -> 0.0014s
== 20150705172511 CreateEasySettings: migrated (0.0086s) ======================

== 20160519161300 CreateEntityAssignments: migrating ==========================
-- table_exists?(:easy_entity_assignments)
   -> 0.0003s
-- create_table(:easy_entity_assignments, {:id=>:integer})
   -> 0.0022s
-- add_index(:easy_entity_assignments, [:entity_from_type, :entity_from_id, :entity_to_type, :entity_to_id], {:name=>"entity_assignment_idx", :unique=>true})
   -> 0.0015s
-- add_index(:easy_entity_assignments, :entity_from_id, {:name=>"entity_assignment_idx_from"})
   -> 0.0013s
-- add_index(:easy_entity_assignments, :entity_to_id, {:name=>"entity_assignment_idx_to"})
   -> 0.0013s
== 20160519161300 CreateEntityAssignments: migrated (0.0068s) =================

== 20190206121100 RemoveForeignKeyFromEasySettings: migrating =================
-- remove_foreign_key(:easy_settings, :projects)
   -> 0.0025s
== 20190206121100 RemoveForeignKeyFromEasySettings: migrated (0.0026s) ========

** Invoke db:_dump (first_time)
** Execute db:_dump
** Invoke db:schema:dump (first_time)
** Invoke db:load_config 
** Execute db:schema:dump

特にRedmineを再起動する必要はありません。
以下のように表示されれば成功です。

easy_gantt_001.png

Redmine標準のガントチャートも改善しているようですが、
やっぱりEasy Ganttの方が使いやすいかなと思います。