タグ: redmine Page 1 of 14

『150日の亡霊』顛末記-Wasabiクラウドストレージの理解不足による重課金の罠-(長文)

概要

筆者は

  • AWS Lightsail → Web Arena Indigo
  • Wasabiクラウドストレージ

で、各種Webサービスを個人的に運用しています。これまで両者は安価で性能も満足いくものだったのですが
2024年11月~2025年3月に至るまで、Wasabiクラウドストレージの高額請求がありました。(解決は2025年4月)

今回、この失敗を記すことで自分と同じような状況に陥りそうな人への注意喚起並びに「こういう落とし穴もあるんだ」という参考にしていただければ幸いです。

時間がない人向けの要約

  1. Wasabiクラウドストレージの仕様を理解していなかったため通常の20倍以上の請求が届いた。
  2. 原因はクラウドストレージの超・超高頻度のファイル書き換え(削除&作成)が発生したため。
  3. この原因を作ったのはGrowi(MongoDB)とNextcloud
  4. これらサービスを停止したものの「最低保持期間ポリシー」の存在により、自動的に発生したファイル書き換えの分の課金が発生した。
  5. 完全解決に至るまでの合計請求額は5ヶ月で544.93$!(2025/04/16でのレート換算で77624.73円)
  6. 教訓
  • クラウドストレージの仕様(特に料金体系)は見ておくこと。
  • クラウドストレージはネットにあるSSDではない。
  • 相性のいい運用方法と相性最悪の運用方法がある。
  • 新しいWebサービスを稼働したらきちんと請求を見ること。
  • 「今まで大丈夫だったからと言って次も大丈夫」ではない。
  1. ビジネスでこれをやってたら請求額はこの数十倍も普通にあった。個人での失敗だからこそ「笑えない笑い話」で済んだ。

『ユミアのアトリエ』発売に向けての準備。

アトリエシリーズ(コンシューマー向け)最新作、『ユミアのアトリエ』発売日と言うことで準備を行いました。

公開用Redmineにプロジェクトを追加

https://atelier.reisalin.com/projects/yumia

新規プロジェクトの作成。

ライザのアトリエ3ほどの熱量があるかは不明ですが、記録には遺そうと思っています。

プレイ中の水分と糖分補給の準備

『ライザのアトリエ3』立て続けにプレイした際、脳のエネルギー源が著しく消費した反省から、今回は過剰と言えるものにしています。

アウトレットでキャラメルポップコーンがあったのはある種の救いでした。

こちらを携えつつ、集中してプレイに臨めればと思っています。

Redmineの404エラーを差し替え。

自分のメモとして残している公開用Redmine『クーケン島観光ガイド』の404.htmlファイルを差し替えた時のメモです。

環境

  • Ubuntu 24.04
  • Apache 2.4
  • ruby 3.2.3
  • MySQL
  • Redmine 5.1

htmlファイル作成

これに関しては自分の好みに合わせました。

  • Redmineの概要や特徴を
  • 英国のタブロイド紙『The Sun』のような文体で
  • 和訳付きで書いて欲しい
  • その際、フォントはRedmineのテーマ『こどもれっどまいん』のものをそのまま使う

を条件にGoogle AI「Gemini」に作成いただきました。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>404 Not Found</title>
  <style>
    /* 通常のフォント */
    @font-face {
      font-family: 'kiloji';
      src: url('/themes/redmine_theme_kodomo/font/kiloji/kiloji.woff') format('woff'),
           url('/themes/redmine_theme_kodomo/font/kiloji/kiloji.ttf') format('truetype');
      font-weight: normal;
      font-style: normal;
    }

    /* 太字のフォント */
    @font-face {
      font-family: 'kiloji';
      src: url('/themes/redmine_theme_kodomo/font/kiloji/kiloji_b.woff') format('woff'),
           url('/themes/redmine_theme_kodomo/font/kiloji/kiloji_b.ttf') format('truetype');
      font-weight: bold;
      font-style: normal;
    }

    body {
      font-family: 'kiloji', sans-serif;
      text-align: center;
      background-color: #f8f8f8; /* 背景色を少し明るく */
      color: #333; /* 文字色を濃いグレーに */
      padding: 20px;
    }

    h1, h2, h3, h4, h5, h6 {
      font-weight: bold; /* 見出しを太字に */
      color: #c00; /* 見出しの色を赤に */
      margin-bottom: 0.5em;
    }

    h2 {
      font-size: 1.8em;
      margin-top: 2em;
      border-bottom: 2px solid #c00; /* 下線を追加 */
      padding-bottom: 0.2em;
    }

    h3{
      font-size: 1.4em;
      margin-top: 1.5em;
    }

    p {
      font-size: 1.1em;
      line-height: 1.6;
      margin-bottom: 1em;
    }
    /* 箇条書き */
    ul{
        list-style: none;
    }

    .bold {
      font-weight: bold;
    }

    .container {
        max-width: 800px;
        margin: 0 auto;
        background-color: white;
        padding: 40px;
        box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.1);
        border-radius: 12px;
    }
    /* リンク */
    a{
      text-decoration: none;
      color: blue;
    }
  </style>
</head>
<body>
    <div class="container">
        <h1>RED-HOT REDMINE: THE PROJECT PANACEA! (AND IT WON'T COST YOU A PENNY!)</h1>
        <p>(和訳: 見出し:プロジェクト管理を激アツに!Redmineは万能薬だ!しかも、一銭もかからない!)</p>

        <h2>PAGE 3: WHAT IN THE BLAZES IS REDMINE? (AND WHY IS IT FREE AS A BIRD?)</h2>

        <p>Cor blimey, you've been living under a rock, ain't ya? Redmine's the <span class="bold">FREE</span>, open-source gaffer that sorts out all your project headaches. Think of it like a Swiss Army Knife for your work – it's got the lot! Tracking bugs, sorting deadlines, sharing files... it's like having a super-organised PA who never nicks your biscuits. And the best bit? It's <span class="bold">FREE as a bird!</span> No dodgy subscriptions, no hidden costs, no sneaky charges that'll leave you skint. It's open-source, meaning a bunch of clever clogs got together and built it for the good of humanity (and probably because they were bored). Bob's your uncle!</p>

        <p>(Page 3: Redmineって一体何者!? (しかも、なんでタダなの!?))</p>
        <p>おいおい、今までどこに隠れてたんだ?Redmineは、<span class="bold">無料</span>でオープンソースの、プロジェクトの悩みを全部解決してくれる頼れるヤツだ。仕事用のスイスアーミーナイフみたいなもんだと思えばいい – 何でもござれ!バグの追跡、締め切りの管理、ファイルの共有… まるで、あなたのビスケットを盗まない超有能な秘書がいるみたいだろ? しかも最高なは、<span class="bold">鳥のように自由(無料)</span>ってこと!怪しいサブスクも、隠れた費用も、一文無しになるようなコソコソした請求も一切なし。オープンソースだから、賢い連中が集まって、人類のために作ったんだ(多分、暇だったんだろうけど)。超簡単だろ!</p>

        <h2>PAGE 5: GET YOUR MITTS ON IT! (HOW TO USE IT AND MAKE IT YOUR OWN)</h2>

        <p>Right, listen up, 'cause this is important. First, you gotta get it installed. It's a bit techy, like setting up your Sky box, but there's loads of guides online. Once it's up and running, you create "projects". Then you chuck in your "issues". Assign 'em to your team, set deadlines, and watch the magic happen!</p>

        <p>But here's the <em>really</em> clever bit: Redmine's like a lump of Play-Doh. You can mould it into whatever shape you want! <span class="bold">That's the beauty of open-source – you can tinker with it 'til your heart's content!</span> Fancy a new feature? Get stuck in and code it yourself (or find a friendly geek to do it for you). Want to change the colours to match your favourite football team? Go for it! It's all yours to play with!</p>

        <p>(和訳: 5ページ目:Redmineをゲットせよ!(使い方と自分だけのものにする方法))</p>
        <p>よーく聞けよ、こっからが重要だ。まず、インストールしなきゃいけない。Skyのセットトップボックスを設定するみたいに、ちょっと技術的なんだが、ネット上にガイドは山ほどある。インストールが終わったら、「プロジェクト」を作る。そしたら、「課題」をぶち込む。チームに割り当てて、締め切りを設定して、あとは魔法が起こるのを待つだけ!</p>
        <p>でも、<span class="bold">本当に</span>すごいのはここからだ。Redmineは、まるでPlay-Doh(粘土)の塊みたいなんだ。好きな形に作り変えられる!<span class="bold">これがオープンソースの素晴らしいところ – 心ゆくまでいじくり回せるんだ!</span> 新しい機能が欲しい?自分でコードを書いて追加しちゃえ(または、親切なギークに頼むんだ)。好きなサッカーチームに合わせて色を変えたい? やっちゃえ! 全部、あなたの自由だ!</p>

        <h2>PAGE 7: FEATURES FIT FOR A KING (OR QUEEN!) (AND YOU CAN ADD YOUR OWN!)</h2>

        <p>This ain't no Mickey Mouse software, mate. Redmine's packed with features that'll make your jaw drop:</p>
        <ul>
            <li><span class="bold">Issue Tracking:</span> Like a bloodhound on the scent, it finds and squashes bugs faster than you can say "Coronation Chicken".</li>
            <li><span class="bold">Gantt Charts:</span> See your project timeline laid out like a football pitch. Know exactly when you're gonna score that winning goal (or finish the project!).</li>
            <li><span class="bold">Wiki:</span> A shared brain for your team. Stick all your important info in there, from meeting notes to the recipe for Aunt Mildred's famous flapjacks.</li>
            <li><span class="bold">Forums:</span> Chat with your team, discuss ideas, and generally have a good old natter.</li>
            <li><span class="bold">Time Tracking:</span> See where your precious hours are going. No more slacking off!</li>
            <li><span class="bold">Custom Fields:</span> Make Redmine your own! Add whatever info you need, like "Biscuit Preference" or "Favourite Spice Girl". <span class="bold">And if that's not enough, you can add <em>even more</em> custom fields 'til the cows come home!</span></li>
            <li><span class="bold">Multiple Project Support:</span> Juggling loads of projects? No dramas! Redmine can handle it all. It's like having ten pairs of hands!</li>
        </ul>

        <p>(和訳: 7ページ目:王室御用達レベルの機能!(しかも自分で追加できる!))</p>
        <p>これは、ちゃちなソフトじゃないぜ、相棒。Redmineには、アゴが外れるほどすごい機能が満載だ:</p>
        <ul>
            <li><span class="bold">課題追跡:</span> まるで獲物を追うブラッドハウンドのように、バグを見つけて潰すのが、「コロネーションチキン」って言うより早い。</li>
            <li><span class="bold">ガントチャート:</span> プロジェクトのタイムラインが、サッカー場みたいに表示される。いつ決勝ゴールを決めるか(つまり、プロジェクトを終わらせるか!)が正確に分かる!</li>
            <li><span class="bold">Wiki:</span> チーム共有の頭脳。会議のメモから、ミルドレッドおばさんの有名なフラップジャックのレシピまで、重要な情報を全部ここにぶち込んでおけ。</li>
            <li><span class="bold">フォーラム:</span> チームとチャットしたり、アイデアを議論したり、とにかく楽しくおしゃべりできる。</li>
            <li><span class="bold">時間管理:</span> 貴重な時間がどこに使われているかを確認できる。もうサボれないぞ!</li>
            <li><span class="bold">カスタムフィールド:</span> Redmineを自分好みにカスタマイズ!「好きなビスケット」とか「好きなスパイスガール」とか、必要な情報を何でも追加できる。<span class="bold">それでも足りなきゃ、牛が帰ってくるまで、もっともっとカスタムフィールドを追加できるぞ!</span></li>
            <li><span class="bold">複数プロジェクト対応:</span> たくさんのプロジェクトを抱えてる? 問題ない!Redmineなら全部管理できる。まるで10個の手があるみたいだ!</li>
        </ul>

        <h2>PAGE 9: IT'S A KNOCKOUT! (CONCLUSION)</h2>

        <p>So there you have it. Redmine: it's free, it's powerful, and it'll make your projects run smoother than a pint of Guinness. Get on it, and you'll be laughing all the way to the bank (or at least to the pub for a celebratory pint!). You'd be a right numpty not to!</p>

        <p>(和訳: 9ページ目:こいつはすごい!(結論))</p>
        <p>これで全部だ。Redmine:無料、パワフル、そしてプロジェクトをギネスビールよりもスムーズに進めてくれる。早速使ってみて、笑いが止まらなくなるはずだ(少なくとも、お祝いのビールを飲みにパブに行くまでは!)。使わないなんて、大バカ者だぜ!</p>
        <br>
        <a href="/">トップページへ戻る</a>
    </div>
</body>
</html>

英国英語の俗語モリモリ、参考元がタブロイド紙ということもあり、読者への煽りも満載の露悪的なものにしています。こうして得た404ページを404.htmlとしてサーバ上に作成します。

サイトへの配置

  • Redmineの404.html格納ディレクトリへの移動
cd /path/to/redmine/root/directory/public

自分の環境に合わせます。/var/lib/html/redmine/public

  • 既存404.htmlの退避
sudo mv 404.html /hoge/404.html.$(date +%Y%m%d)

任意の退避先を指定します。

  • ファイル差し替え

上記の404.htmlを任意の方法でこのディレクトリに配置します。

sudo chown www-data:www-data 404.html

として、アクセス権をapache2実行ユーザ(デフォルトではwww-data)に変えておきます。

必要に応じてWebサービス再起動、動作確認

動的な部分を一切いじらないため、Webサービスの再起動は不要ですが、念のため

sudo systemctl restart apache2.service && echo $?

0を確認

として、Webサービスの再起動を行います。

設定後、サイトURLに存在しない文字列を適当に入れて、上記の404エラーが出れば設定完了です。

より明確化したいのであれば、アクセスログやエラーログを確認して404がでていることを確認しましょう。

Redmineからのメール送信エラー解決メモ(手動 OpenSSL 更新に伴う証明書ストアの修正)

概要

Redmineサーバからリマインダーのメールが送信されない事象を解決したときのメモ書きです。

環境

  • Ubuntu 24.04
  • OpenSSL 3.3.3
  • Redmine 5.1
  • Apache 2.4
  • MySQL 8.0.41

特記事項

サーバにはメール送信の機能を有しておらず、gmailのアプリ連携でメールを飛ばしています。

事象確認

  • Redmine ルートディレクトリに移動
cd /path/to/redmine/root/directory && pwd

筆者環境/home/www-data/redmine

  • リマインダメールを送信
sudo -u www-data bundle exec rake redmine:send_reminders days=7 RAILS_ENV=production

リマインダメール送信されず。

そこで、production.logを確認したところ、メール送信時に以下のエラーログが出力されました:

ERROR -- : [ActiveJob] [ActionMailer::MailDeliveryJob] Email delivery error: SSL_connect returned=1 errno=0 peeraddr=xxx.xxx.xxx.xxx:587 state=error: certificate verify failed (unable to get local issuer certificate)

どうやら、証明書回りのエラーのようです。

確認したこと(原因確認)

メール設定の再確認

まず、メール設定を再確認しました。RedmineでのSMTP設定は特に変更していないため、問題は設定に起因するものではないと判断しました。

OpenSSLの設定を再確認

そこで思い当たる節。

パッケージ管理システムからではなく、手動で OpenSSL を更新した影響で、証明書ストアのパスが /usr/bin/openssl から /usr/local/ssl に変更されていたことが原因だと分かりました。

/usr/local/ssl/bin/openssl version -d

OPENSSLDIR: "/usr/local/ssl" を確認。

対処

CA証明書のコピー

新しい証明書ストア /usr/local/ssl にシステムの CA 証明書をコピーしました:

sudo cp /etc/ssl/certs/ca-certificates.crt /usr/local/ssl/cert.pem

また、証明書ディレクトリを作成し、必要な証明書を全てコピーしました:

  • ディレクトリ作成
sudo mkdir -p /usr/local/ssl/certs
  • システム内の証明書ストア一式をコピー
sudo cp -r /etc/ssl/certs/* /usr/local/ssl/certs/
  • 証明書ストア一式を再暗号化
sudo /usr/local/ssl/bin/c_rehash /usr/local/ssl/certs/

環境変数の設定

/etc/environmentに以下の内容を追記しました。

SSL_CERT_FILE=/usr/local/ssl/cert.pem
SSL_CERT_DIR=/usr/local/ssl/certs
  • 設定後の反映
sudo source /etc/environment

Redmine(Apache)再起動

  • apache再起動
sudo systemctl restart apache2.service ; echo $?

0を確認

  • apache再起動確認
systemctl status apache2.service

active(running)を確認

解決確認

  • Redmine ルートディレクトリに移動
cd /path/to/redmine/root/directory && pwd

筆者環境/home/www-data/redmine

  • リマインダメールを送信
sudo -u www-data bundle exec rake redmine:send_reminders days=7 RAILS_ENV=production

今度は正常に送信されることを確認しました。

まとめと教訓

Redmineからメールが送信できなかった問題は、手動で更新したOpenSSLの証明書ストアのパス設定が原因でした。

証明書ストアが適切に設定されていないと、SMTP 送信時に certificate verify failed エラーが発生。

証明書関連の問題が発生した場合、OPENSSLDIR を確認し、適切な CA 証明書が配置されているかチェックすることが重要。

また、証明書周りはシステム全体に影響を及ぼすため、確認が甘かったということも事実。これは、手動でOpenSSLをアップグレードする際にも、改めて手順を確認します。

Redmineサイトのセキュリティヘッダー修正。(脆弱性サイトの評価をA→A+に引き上げ)

外部に公開しているRedmineサイト。

https://plan.io/redmine-security-scanner

で確認したところ、評価はA。

X-Content-Type-Options header not set Content sniffing may enable cross-site scripting attacks. Since your Redmine server is not properly sending the X-Content-Type-Options header, your users are vulnerable to this attack vector.

の診断が出てA+に至りませんでした。

そこで、設定を修正し、脆弱性評価をA+に引き上げます。

環境

  • Ubuntu 24.04
  • Apache 2.4
  • Redmine 5.1
  • mod_headers モジュール有効化済み

現状のセキュリティヘッダー確認

  • /etc/apache2/sites-available/redmine.conf

で以下の箇所を確認。

    Header always set Strict-Transport-Security "max-age=63072000"
  Header set X-Content-Type-Options "nosniff"
  Header always append X-Frame-Options "SAMEORIGIN"
  Header set X-XSS-Protection "1; mode=block"

セキュリティヘッダーの適用方法を見直し、適切に設定されるよう修正します。

設定修正

  • ファイルのバックアップ
sudo cp -pi /etc/apache2/sites-available/redmine.conf /path/to/backup/directory/redmine.conf.$(date +%Y%m%d)

※自分のRedmineサイトの設定ファイルを指定します。

任意のバックアップディレクトリを指定します。(筆者環境 /etc/apache2/old/redmine.conf.$(date +%Y%m%d)

  • diffによるファイルバックアップ確認
diff -u /path/to/backup/directory/redmine.conf.$(date +%Y%m%d) /etc/apache2/sites-available/redmine.conf 

差分がなければ(エラーがなければ)バックアップ成功です。

  • ファイルの修正

上記のredmine.confを、以下の差分になるように修正します。(管理者権限が必要)

-    Header set X-Content-Type-Options "nosniff"
-   Header always append X-Frame-Options "SAMEORIGIN"
-   Header set X-XSS-Protection "1; mode=block"
+   Header always set X-Content-Type-Options "nosniff"
+   Header always set X-Frame-Options "SAMEORIGIN"
+   Header always set X-XSS-Protection "1; mode=block"
  • ファイル修正確認
diff -u /path/to/backup/directory/redmine.conf.$(date +%Y%m%d) /etc/apache2/sites-available/redmine.conf 

上記の差分が出てくればOKです。

設定反映

  • 構文確認
sudo apache2ctl configtest

Syntax OKを確認します。

  • Apacheステータス確認(反映前)
systemctl status apache2.service

active (running)を確認します。

  • Apache再起動
sudo systemctl restart apache2.service && echo $?

→ 成功時は 0 が出力されます。

  • Apacheステータス確認(反映後)
systemctl status apache2.service

active (running)を確認します。

修正確認

  • curlによる確認
curl -I https://redmineサイト

以下のような表示を確認します。

X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 1; mode=block
X-Request-Id: ***********
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-Runtime: 0.615862
X-Content-Type-Options: nosniff
  • 脆弱性診断サイトによる確認

https://plan.io/redmine-security-scanner

でURLを入力します。

過去の診断結果が表示されるため、『Re-Scan』をクリックして最新の診断結果を取得します。

「A+」の評価と、以下のような表示が出れば修正できています。

It looks like you are running Redmine 5.1.4. That's a version without any known security issues. Your Redmine is protected by properly configured TLS/SSL. All security relevant headers are configured properly. It appears that you have 3 or more Redmine plugins installed.

Redmine5.1に文書管理プラグイン(dmsf)をインストールする上での注意点。

こちらの記事の補足となります。

前提

2025/01/23時点のdmsfプラグインの最新バージョンはRedmine 6.0に合わせたものです。

そのため、git cloneする際に

https://github.com/danmunn/redmine_dmsf/releases

を確認して、Redmineのバージョンと合っているかを確認。

その上で

sudo -u www-data git clone -b v3.2.4 https://github.com/danmunn/redmine_dmsf

バージョンを指定してからgit cloneします。

これを怠ると

自分の例ですが、「Redmineそのものが深刻な機能不全を起こしました」。

具体的に言うと

  • チケットを発行、閲覧、更新時にエラーが起きる
  • Something wrongの画面が出る

などです。

重ねての注意点

  1. 強力な機能をもたらすプラグインほどDBや機能に深刻な影響をもたらします。DBのバックアップは必須です。
  2. 本当に動くバージョンかを更に確認。

と、躓いた上での経験談でした。

Redmineのかんばんプラグインの差し替えメモ。

概要

Redmineのプラグインをかんばんからダッシュボードプラグインに差し替えたときのメモです。

環境

  • Ubuntu 24.04
  • Redmine 5.1
  • MySQL 8
  • Ruby 3.2
  • Apache 2.4

さっくりとした手順

  1. DBのバックアップ
  2. 既存のかんばんプラグイン削除
  3. ダッシュボードプラグインインストール
  4. 動作確認

DBバックアップ

  • 作業ディレクトリ移動
cd /hoge && pwd

任意の作業ディレクトリに移動

  • DBバックアップ
mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
  • バックアップ確認
view redmine_backup.$(date +%Y%m%d).sql

Redmine kanbanのアンインストール (退避)

  • ディレクトリ移動
cd /path/to/redmine/root/directory/plugins && pwd
  • kanbanプラグインの退避
sudo mv kanban /path/to/backup/directory/kanban_org_$(date +%Y%m%d)
  • 退避確認
ls -ld /path/to/backup/directory/kanban_org_$(date +%Y%m%d)
  • Webサービス再起動
sudo systemctl restart apache2.service && echo $?

0を確認

Dashboardプラグインのインストール

  • git clone
sudo -u www-data git clone https://github.com/jgraichen/redmine_dashboard
  • clone 確認
ls -ld redmine_dashboard
  • Redmineルートディレクトリに移動
cd /path/to/redmine/root/directory && pwd
  • bundle install
sudo -u www-data bundle install --without development test
  • DBマイグレーション
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production
  • Webサービス再起動
sudo systemctl restart apache2.service && echo $?

0を確認

確認

  1. Redmineに管理者権限でログイン
  2. 管理>プラグインにRedmine Dashboard pluginがあることを確認
  3. 任意のプロジェクト>設定で「ダッシュボード」を有効化して保存。
  4. プロジェクトのタブにダッシュボードが表示されること、自分が担当するチケットをドラッグアンドドロップで表示されることを確認

Railsのハマり案件。状況収束。

昨日のこの案件は無事に解決。

対処

原因が自分のRails/Rubyによるものが明らかだったので、それぞれの入れ直しです。

Rubyアンインストール

sudo apt remove --purge ruby ruby-dev rubygems
apt autoremove

として、関連のパッケージを全て削除。設定は特にしていなかったのが幸いしました。

Ruby 再インストール

sudo aptitude install ruby libruby ruby-dev libmysqlclient-dev
sudo aptitude install libapache2-mod-passenger

gemで関連パッケージインストール

sudo gem install bundler racc mysql2

apache再起動

sudo systemctl restart apache2.service && echo $?

→ 0が返ってきたので反映もOK。

後はbundle installもDBマイグレーションも無事に通るようになりました。

Railsのハマり案件。状況発生。

前に見たことがないエラーにとっ捕まったため、状況をメモしておきます。

環境

  • Ubuntu 24.04
  • Ruby 3.2

何が起きているか

Redmineの検証のため、新たに5.1を立てています。

  1. SVNでチェックアウト
  2. DBなどを作成
  3. database.ymlにDB情報を追記
 sudo -u www-data bundle exec rake generate_secret_token

実行後、

rake aborted!
NameError: uninitialized constant ActiveSupport::LoggerThreadSafeLevel::Logger (NameError)

    Logger::Severity.constants.each do |severity|
          ^^^^^^^^^^
/home/www-data/hideout/vendor/bundle/ruby/3.2.0/gems/activesupport-6.1.7.10/lib/active_support/logger_thread_safe_level.rb:16:in `<module:LoggerThreadSafeLevel>'
/home/www-data/hideout/vendor/bundle/ruby/3.2.0/gems/activesupport-6.1.7.10/lib/active_support/logger_thread_safe_level.rb:9:in `<module:ActiveSupport>'
/home/www-data/hideout/vendor/bundle/ruby/3.2.0/gems/activesupport-6.1.7.10/lib/active_support/logger_thread_safe_level.rb:8:in `<top (required)>'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
/home/www-data/hideout/vendor/bundle/ruby/3.2.0/gems/activesupport-6.1.7.10/lib/active_support/logger_silence.rb:5:in `<top (required)>'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
/home/www-data/hideout/vendor/bundle/ruby/3.2.0/gems/activesupport-6.1.7.10/lib/active_support/logger.rb:3:in `<top (required)>'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
/home/www-data/hideout/vendor/bundle/ruby/3.2.0/gems/activesupport-6.1.7.10/lib/active_support.rb:29:in `<top (required)>'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
/home/www-data/hideout/vendor/bundle/ruby/3.2.0/gems/railties-6.1.7.10/lib/rails.rb:7:in `<top (required)>'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
/home/www-data/hideout/config/application.rb:5:in `<top (required)>'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
/home/www-data/hideout/Rakefile:5:in `<top (required)>'
/home/www-data/hideout/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/exe/rake:27:in `<top (required)>'
(See full trace by running task with --trace)

が発生。そのため、DBマイグレーションも通らないという状況。

この問題はやっかいそうなので、まずは事象が発生したという事実だけメモをします。

Redmine View Customizeで、ステータスに応じてバージョンを移動させる。

個人用のメモとして活用しているRedmine。

ステータスをハリポタシリーズの呪文に見立てているなど、かなり遊んでいます。

そこで、

  • 終わったチケット
  • 却下されたチケット

を、自動的にそれらのバージョンに移動できないかということで組んだCustomizeです。

  • Redmine 5.1
  • View Customize

で動作を確認しています。

カスタマイズ

  • パスのパターン:空白
  • プロジェクトのパターン:空白
  • 挿入位置:全ページのヘッダ
  • 種別:JavaScript
$(document).ready(function() {
  const prophecyRoomId = 4; // 「予言の間」のバージョンID
  const azkabanId = 5; // 「アズカバン」のバージョンID

  $('#issue_status_id').change(function() {
    const statusId = parseInt($(this).val()); // ステータスのIDを取得
    if (statusId === 5) { // FinitoのステータスID(例)
      $('#issue_fixed_version_id').val(prophecyRoomId); // 「予言の間」に変更
    } else if (statusId === 6) { // Avada KedavraのステータスID(例)
      $('#issue_fixed_version_id').val(azkabanId); // 「アズカバン」に変更
    }
  });
});

変数は自分が分かればいいのでこのような形にしています。なお、バージョンやステータスのIDは管理画面で把握できます。

あとは保存して、

  1. チケットのステータスを移動
  2. それに応じてバージョンが変わる

ことを確認できればOKです。

Page 1 of 14

Powered by WordPress & Theme by Anders Norén