Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    Naoki Takezoe
    @takezoe
    @suda0803 上限を200にしている大きな理由はありませんので対応可能かと思います。可能であればGitHubでIssueをあげていただければと思います。
    ボーボボ
    @thisis_bobobo_twitter
    はじめまして、git初学者です。gitbucketのバックアップを任されたのですが、どのファイルをバックアップしたら良いのでしょうか。gitbucketをWindowsサーバ上で使用してます。dbはPostgreSQLを使用してます。
    ボーボボ
    @thisis_bobobo_twitter
    backup用のpluginでバックアップをしようと考えていたのですが、GITBUCKET_HOMEのリポジトリとpostgreSQL内のデータ(私自身何を管理してるかわかってない)をコピーすれば良いのでは?と言われ、困惑してます。バックアップに必要なデータが何なのか、また参考になるページ等もありましたら、教えてほしいです。 
    Naoki Takezoe
    @takezoe

    @thisis_bobobo_twitter GITBUCKET_HOMEディレクトリ(デフォルトでは実行ユーザのホームディレクトリですが環境変数等で変更可能)のとDB(ご利用の環境の場合はPostgreSQL)のバックアップで問題ないはずです。GITBUCKET_HOMEディレクトリの内容は以下のようになっています。
    https://github.com/gitbucket/gitbucket/blob/master/doc/directory.md

    DBで管理している内容についてはまとまったドキュメントがないのですが、リポジトリやユーザ、イシューやプルリクエストの情報などが管理されています。GitBucket上の管理コンソールからデータベースの内容を確認できます。

    ボーボボ
    @thisis_bobobo_twitter
    ありがとうございます。とても助かりました。また勉強になりました。
    Hidetomi
    @Hidetomi
    gitbucketのトップページのレイアウトをカスタマイズしたいのですが、アドバイス頂きたいです。プラグインではできないでしょうか?本体のコードを直接改造するぐらいしか見いだせていないため、
    何かヒントを頂ければ幸いです。
    Naoki Takezoe
    @takezoe
    @Hidetomi 多少レイアウトを変える程度であればトップページにJavaScriptを差し込むプラグインを作ってカスタマイズすることができると思いますが、丸ごと差し替えるとなるとGitBucket本体のソースコードに手を入れた方がよいのではないかと思います。
    もしくはプラグインで別のパスに画面を作っておいて、トップページに差し込んだJavaScriptでリダイレクトする、といった方法を使えばプラグインだけでもできるかもしれません。手前にリバースプロキシを挟んでいるのであればそこでパスを書き換えてしまうのもありかと思います。
    Hidetomi
    @Hidetomi
    @takezoe ありがとうございます。本体のソースコードに手を加えるのは今後のバージョンアップなど考えると得策ではなく、最終手段になると考えていました。
    リバースプロキシを挟んでいない環境であるため、まずはご教授頂いたJavascriptでリダイレクトして別画面の方を見せる案を試してみたいと思います。
    Hidetomi
    @Hidetomi
    @takezoe 追加ですみません。私はプラグイン開発は初めてになります。
    こちらのたけぞうさんのブログとコミュニティのプラグインでGitHubに公開されているコードを参考に手をつけてみようと考えています。
    上記以外に参考になりそうな情報があれば教えて頂けないでしょうか?
    Naoki Takezoe
    @takezoe
    上記の日本語記事は少し古いのですが、記事内からリンクされている以下の英語記事の方はアップデートされており、GitBucketプラグイン開発用のsbtプラグインを使った新しい方法になっていますのでそちらを参照されたほうがよいかと思います。あとはご指摘の通り、既存のプラグインくらいしか情報源はないのではないかと思います。
    https://gitbucket.github.io/gitbucket-news/gitbucket/2015/06/29/how-to-create-plugin.html
    ところでトップページをカスタマイズしたいという要望は過去にも何度かありましたので、トップページへのアクセスを指定のパスにリダイレクトする機能を本体側で入れたりしてもよいのかもしれないですね。
    Hidetomi
    @Hidetomi
    @takezoe ありがとうございます。英語記事の方を参考にさせて頂きます。
    もし、指定パスにリダイレクトする機能を本体側に入れて頂けるのでしたら助かります。。。
    私は普段scalaを触っていない者でして、私がやっても乱暴なカスタマイズになるだろうなって考えています。
    Hidetomi
    @Hidetomi

    あるリポジトリのwikiの編集画面(URLは/<owner>/<repository-name>/wiki/<page-name>/_edit)を表示した際に、
    Saveボタンの横に配置されている<input type="hidden" name="id" value=""/>id(最終コミットID?)のvalueが空っぽとなってしまっており
    ブラウザ画面からWikiを更新できずにいます。(TortoiseGitからのコミット&プッシュは成功しています。)
    gitbucketのバージョンを4.31.2から4.35.3にアップグレードを行ったあと、この事象が発生しはじめました。

    この事象は特定のリポジトリにのみ発生しており再現する条件がまだ分かっておらず、知恵を借りたいです。
    上記のidが空っぽとなる場合に、どういった観点で調査すべきか、何を疑えば良いかご教示頂ければ幸いです。

    Yuusuke KOUNOIKE
    @kounoike
    確かトップページをハンドルするプラグインを読み込ませると、プラグインの方が優先されたような覚えがあります。最近やってないのでどうなってるかわかりませんが…
    Naoki Takezoe
    @takezoe
    ああ、確かにプラグインのほうが優先されるので、プラグインで / をハンドルするコントローラを差し込むだけで トップページをカスタマイズできるかもしれないですね。これは既存の画面を差し替える際にも使えそうな技ですね。
    Wikiの編集の問題についてはこちらでも少し調べてみます。
    Hidetomi
    @Hidetomi
    @kounoike @takezoe ありがとうございます!!
    コミュニティプラグインを何本か読み込ませているので、それが何か悪さしているのかもしれません。
    プラグインを外してみて同じように再現するか確かめてみます。
    Naoki Takezoe
    @takezoe
    @Hidetomi Wikiが編集できない問題についてですが、Wikiリポジトリのファイル数が100を超えているということはないでしょうか?
    4.34.0で入れた gitbucket/gitbucket#2466 のパフォーマンス改善の影響でWikiリポジトリ内のファイル数が100を超えると編集できなくなってしまうという問題が以前別のユーザさんから報告いただきまして、 gitbucket/gitbucket#2869 で修正したのですが、この修正はまだ未リリースとなっています。
    Hidetomi
    @Hidetomi
    @takezoe Wikiリポジトリ内のファイル数は100を超えていないです。GitBucket全Wikiリポジトリのファイル数を合わせると100を超えているかもしれません。
    そのissueにあるWikiファイル数100の対象は、1つのWikiリポジトリ内に閉じたWikiファイル数で合っているでしょうか?
    あるいは、編集ができないWikiリポジトリに限定せず、いずれかのWikiリポジトリ内のファイル数が100を超えているとNGということであれば、少し調査で時間が必要になります。
    Naoki Takezoe
    @takezoe
    @Hidetomi ファイル数の制限は対象の1リポジトリ内のファイル数(正確には1ディレクトリ内のファイル数)です。他には思いつく原因がないですね・・・。可能であれば編集できないWikiリポジトリを最新バージョン含め、各バージョンのGitBucketにインポートしてみて編集が可能かどうか、どのバージョンから動作しないか、を試していただけると切り分けが容易になるかと思います。
    Hidetomi
    @Hidetomi

    @takezoe
    アドバイス頂きありがとうございます。

    どのバージョンから動作しないか

    上記を試すにはメンテナンスのタイミングが必要なので時間がかかってしまいそうです。
    取り急ぎで試せそうなことを先にやってみようかと考えており、問題の内容と直接関係がないのでダメ元感はありますが
    ご教示頂いた gitbucket/gitbucket#2466 の変更分をバージョン4.35.3に取り込んで生成したwarファイルで改善されるか確かめてみようと思います。

    Naoki Takezoe
    @takezoe
    手元でGitBucketを立ち上げてgit cloneしたWikiリポジトリをpushすれば試せるかと思ったのですが、環境的に難しい感じでしょうか?とはいえ gitbucket/gitbucket#2466 以外に思い当たる原因がありませんので、こちらをrevertして試してみていただくのは切り分けの一歩目としては有効かと思います。
    手元で動作確認できる環境を作ることができれば、たとえばIDEでデバッグしてどこでidが取れていないかを追うこともできるかと思います。
    Motonori IWAMURO
    @vmi
    現在 4.35.3 を使用しています。一部のブランチでプルリクエストが発行できない問題が発生しています。(Create Pull Requestボタンを押しても何もおきない)
    どうやらブランチ名が長過ぎる(どこが境界かは不明ですが、125文字だとNGでした)とプルリクエストが発行できないように見えるのですが、何か対策はありますでしょうか? (何文字以下ならOK、という情報でもかまいません)
    ネットワークアクセスが発生していないようなので、JavaScriptの段階で止まっていると思われます。
    Naoki Takezoe
    @takezoe
    @vmi プルリクエストではブランチ名の制限が上限100文字までとなっていますので、その入力チェックで引っかかっているのではないかと思います。
    2 replies
    fujifuji9999
    @fujifuji9999
    はじめまして。gitbucketを使わせていただいています。
    ver4.29.0→ver4.32.0にアップに成功(push成功)し、ver4.32.0→ver4.37.2にアップしたところ、pushに失敗し、tomcatからgitbucketにアクセスできなくなってしまいました。push時のエラーの内容は、「fatal: repository リポジトリURL not found Pushing to リポジトリURL」でした。
    tomcatのlogも確認してみましたが、pushのタイミングで発生しているログはありませんでした。ブラウザからアクセスすると「404 - Not Found」となりますが、tomcatにはアクセスできています。何か原因わかりますでしょうか。
    fujifuji9999
    @fujifuji9999
    使用環境は、
    Windows Server 2016 バージョン1607
    Apache Tomcat 8.5
    Java jre_1.8.0_251
    になります。
    Naoki Takezoe
    @takezoe
    @fujifuji9999 ちょっとこれだけではわからないですね。アップグレード時のログ、アップグレード後の起動時のログはあるでしょうか?
    fujifuji9999
    @fujifuji9999
    アップグレード時付近のログ(localhost.2022-04-23.log)をGistに貼り付けました。
    https://gist.github.com/fujifuji9999/62cf751d3cfcd482996d5f319ef6f6f5
    fujifuji9999
    @fujifuji9999
    こちらのログ(catalina.2022-04-23.log)もありましたので、Gistにあげました。
    https://gist.github.com/fujifuji9999/261c3368283dbb67effadc7d613d8393
    Naoki Takezoe
    @takezoe
    h2のデータベースが破損しているのではないかと思うのですが、h2のデータファイル(デフォルトでは~/.gitbucket/data.mv.dbに作成されているはずです)を直接JDBCクライアントなどで参照して中身を確認できるでしょうか?破損している場合、バックアップがあればそのデータから再度アップグレードを試みるか、h2のリカバリツールを使って修復できる可能性もあります。
    アップグレード時はDBの自動マイグレーションで予期しない問題が発生する可能性があるためDBのバックアップを取ることをおすすめしています。また、標準の組み込みh2データベースはJVMのクラッシュ時などデータ破損の可能性があるため重要な用途に利用される場合は外部DB(PostgreSQLまたはMySQL)の利用をおすすめしています。
    fujifuji9999
    @fujifuji9999

    解析ありがとうございます。
    ~/.gitbucket/data.mv.dbへの接続の方法は、まだやったことがないので、
    https://sukkiri.jp/technologies/ides/eclipse/h2jdbc_install_web.html
    こちらを参考にして確認してみます。

    ちなみに、現在のdata.mv.dbのサイズを確認すると200Kbyte程度あるのですが、今回のバージョンアップよりだいぶ前に~/.gitbucket/をまるごとコピーしたものがあるのですが、それをみるとdata.mv.dbは0KBでした。これはそういうのものなのでしょうか?

    定期的に(月に1度)、こちらのプラグインを参考にして自動でバックアップを取っているものがあります。DBがSQL形式で出力されています。これを使用して修復できる可能性はありますでしょうか?
    https://jyuch.hatenablog.com/entry/2018/01/29/232015

    fujifuji9999
    @fujifuji9999

    ~/.gitbucket/data.mv.db接続を試してみましたが、エラーとなってしまい接続できませんでした。
    https://gist.github.com/fujifuji9999/81fb4648cd3792e66ec131825176d6d3

    直前にバックアップしたものがあったのですが、これもdbが0byteとなってしまっていたため、戻してもgitbucketにはアクセスできるのですが、ログインできませんでした。(dbに情報がないからですね)

    現状の壊れていると思われるdbを、h2のリカバリーツールを使って修復してみましたが、途中でエラーが出ていました。
    https://gist.github.com/fujifuji9999/73bffebe7182655f41eda4008992fc6f
    一応作成されたdbを上書きしてみましたが、やはりgitbucketにはつながりませんでした。

    打つ手なしでしょうか・・・。

    Naoki Takezoe
    @takezoe
    バックアップがなく修復も不可能となるとDBに格納されているデータの復元は不可能かと思います。Gitリポジトリ自体は~/.gitbucket/repositoriesの下にbareリポジトリがありますのでそちらから復元が可能かと思います。
    fujifuji9999
    @fujifuji9999

    やはり、復元不可能ですか・・・。

    bareリポジトリから復元できるとのことですが、方法としては新規gitbucketにpushするということになるのでしょうか?

    Naoki Takezoe
    @takezoe
    そうなりますね。
    fujifuji9999
    @fujifuji9999
    ありがとうございます。もう少し教えてください。
    fujifuji9999
    @fujifuji9999
    https://qiita.com/orange5405/items/783b74667bcc69a34a52
    こちらを参考にbareリポジトリ復元を試していますが、現状dbが破損している状態だと$ git clone --mirror <SOURCE_REPOSITORY_URL>を実行してもアクセスできないためエラーとなってしまいます。
    一度dbをアクセスできる状態(空)にしてから、bareリポジトリを上書きしてcloneを行えばよいのでしょうか?
    fujifuji9999
    @fujifuji9999
    すみません、解決しました。
    ローカル環境にbareリポジトリをそのままコピーしてきてpushでできました。
    この状態であとはユーザ登録を地道に行って復元します。あとは、DBを外部DB(PostgreSQLまたはMySQL)を利用するように変更したいと思います。
    大変勉強になりました。ありがとうございました。
    Naoki Takezoe
    @takezoe
    外部DBをお使いの場合も定期的、かつアップグレード時には別途バックアップを取ることをおすすめします。DBが壊れてしまうといとはないにしろ、自動アップグレードがうまくいかず、DBが中途半端な状態になってしまうというケースもありますので・・・。
    fujifuji9999
    @fujifuji9999

    その節はありがとうございました。
    DBを無事に復元できましたので、DBをH2からPostgresSQLに変更しています。SQLファイルのインポートまで成功し、こちらの説明にあるSQL文をGitBucketのDatabase viewerから実行しました。
    https://takezoe.hatenablog.com/entry/2016/07/16/025154

    SQL文を実行すると、
    SELECT setval('label_label_id_seq', (select max(label_id) + 1 from label));
    は戻り値に数値が返ってきますが、
    それ以外は、NULLと表示されます。これは成功しているのでしょうか?

    3 replies
    anakamura-bokeh
    @anakamura-bokeh
    はじめまして。gitbucketを使わせていただいています。
    今、プラグインをビルドし直すとプラグインの初期化が正常実行できない現象に悩んでいます。

    GitBucket本体は現在4.37.2です。(ダウンロードしたgitbucket.warをそのまま利用)

    例えばデフォルトでインストールされるgistプラグイン4.22.0は動いています。
    それを(テストのため念のため)アンインストールしたのち、
    gitbucket-gist-plugin-4.22.0のソースを落としてそのままsbt assemblyしたものを入れると、
    gistプラグインが開始できなくなります。

    15:31:05.404 [Thread-5] INFO gitbucket.core.plugin.PluginRegistry - Initialize gitbucket-gist-plugin-4.22.0.jar
    15:31:05.430 [Thread-5] ERROR gitbucket.core.plugin.PluginRegistry - Error during plugin initialization: gitbucket-gist-plugin-4.22.0.jar
    java.lang.reflect.InvocationTargetException: null
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

    といった具合です。

    他のプラグインgitbucket-backup-pluginでは(initializeをoverrideしている)、
    エラーは起きず起動するもののプラグイン側でoverrideしたinitializeが呼ばれない現象を確認しています。
    見よう見まねで作った自作のプラグインも同様にinitializeが呼ばれなかったです。
    GitBucket本体は各プラグインのinitializeを呼んでいるはずです。(改造したgitbucket.warで、plugin.initialize(...)の前後にログを置いて確認もした)

    こちらの環境構成は、
    gitbucket.warはWindows11上のTomcat10にデプロイしています。(上記のログはTomcatのログから取っています)
    DBはPostgreSQL14.2に切り替えています。
    JavaはJDK11、sbtは1.6.2です。(gist 4.22では1.5.6を指定したまま利用)

    JavaをJRE8にして、サービスの再開とgistのビルドしなおしからやりなおしてみても結果は同じで、ダメでした。

    以前、GitBucket4.34の頃にWin10,Tomcat9,JRE8,PSQL12といった構成で、ビルドし直した時は、正常に呼び出せていました。

    gistの例ではバージョン対応されたプラグインを改変せずビルドしなおしているだけなので、
    何等かこちらの環境の不整合が原因だろうと思いますが、JavaやScalaに詳しくなく対策に行き詰まってます。
    このような呼び出し不整合のときに試すべき対処についてアドバイスいただけると助かります。
    2 replies
    anakamura-bokeh
    @anakamura-bokeh
    アドバイスありがとうございます。
    GitBucket本体は今回問題を追跡するために始めてビルドしました。
    ただGitBucket他各種サービス、プラグインを0から今のバージョンで入れておらず、
    それぞれにバージョンアップを重ねているところもあるので、
    古いキャッシュ類が残っていないか、クリアしていってみます。
    anakamura-bokeh
    @anakamura-bokeh

    対応が4.34の頃の古いプラグインがsbt.version = 1.2.8など指定しているときビルドすると、
    ivyのキャッシュができていましたが、このころのgistプラグイン(4.19)が使っている1.3.12にするとivyのキャッシュはできなかったです。
    ivy,mavenのローカルキャッシュ(ユーザーフォルダ内の.ivy2,.m2フォルダ)は見当たらなかったです。

    以前、GitBucket4.34の頃にWin10,Tomcat9,JRE8,PSQL12といった構成で、ビルドし直した時は、正常に呼び出せていました。
    と書いたのは、gitbucket-backup-pluginの話で、gitbucket-gist-pluginは当時ビルドを試してはいなかったです。

    今回、改めて.ivy2は消して、GitBucket 4.34.0(自前ビルドでなくダウンロードしたリリースバイナリ)にしてみて、
    JRE8,Win11,Tomcat10,H2の構成で試してみました。
    JRE8を複数のディストリビュータのもので切り替えてもみました。
    状況は変わらなかったです。

    gitbucket-gist-pluginは、PluginRegistry.scalaの
    val plugin = classLoader.loadClass("Plugin").getDeclaredConstructor().newInstance().asInstanceOf[Plugin]
    での生成で失敗しているようです。

    真似て作ったテストプラグインは、そこを通るものの
    initializeの中でロガーから出力を出しても何もTomcatのログに残らず、
    そもそもoverrideしたinitializeでsuper.initializeを呼ばなくても正常に登録が済んでいるように見えるので、
    override側でなくgitbucket.core.plugin.Pluginのinitializeがそのまま呼ばれているように思えます。
    (pluginIdやpluginName, description, versionsは、overrideした内容がGitBucketのPluginsページで確認できます)

    JDK,JREのディストリビュータによっても違うものでしょうか。
    差し支えなければ、githubで公開されているGitBucketやgistプラグインのリリースビルドで使われた
    JDK,JREの入手元を教えていただくことはできますか。

    2 replies
    anakamura-bokeh
    @anakamura-bokeh
    ところでgitbucket-gist-pluginは、4.19も4.22、最新masterもbuild.sbtで、useJCenter := true とありました。
    これがあるので、ivy, mavenが使われていないのでしょうか。
    それとJCenterは今年の2月1日でサービス終了という記事をみました。
    useJCenter := trueを外すとgistプラグインはビルドできないので、必要そうですが、こちらはそのままでよいはずでしょうか。
    1 reply
    anakamura-bokeh
    @anakamura-bokeh

    試行錯誤してみましたが当初のまま、ローカルでビルドしたプラグインに対して、次の2点が解決できなかったです。
    Plugin.scalaでのPluginクラスの実装で

    ・newするコントローラーの中身によってnewInstanceの中でjava.lang.reflect.InvocationTargetException: nullが発生してしまう
     (gitbucket-backup-pluginは問題ないが、gitbucket-gist-pluginやgitbucket-pages-pluginは上記例外が起きました)

    ・Pluginのoverrideしたメソッド(InitializeだけでなくおそらくはShutdownも)が呼ばれず、基底(gitbucket.core.plugin.Plugin)の実装だけが処理される
     (overrideしたvarは、ローカルビルドの内容が反映される)

    initializeで実行できない処理は、必要なプラグインにpostの受け口を設けて、サービス実行時に外部からcurlなどで実行することで代用させました。

    しかしおかげさまでプラグインの実装やビルド状況の理解は進んだと思います。ありがとうございます。

    2 replies