Macでoverleaf
そのまま作業したらmongodb でエラーが出るので,対処法の記録.
まずは,github の overleafのqucik-start-guideに基づいて作業します.
cd ~/git git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit cd ./overleaf-toolkit bin/init bin/up
普通ならこれで起動するはずが,MONGO_VERSIONの値がおかしいと言われます.
--------------------- ERROR ----------------------- Invalid MONGO_VERSION: MONGO_VERSION=6.0 MONGO_VERSION must start with the actual major version of mongo, followed by a dot. Example: MONGO_IMAGE=my.dockerhub.com/custom-mongo MONGO_VERSION=6.0-custom --------------------- ERROR -----------------------
今まで1つの変数で扱っていたのを,MONGO_IMAGEとMONGO_VERSIONに分けた模様.
で,MONGO_VERSIONは,メジャーバージョンの数字とドットで始まる書式が求められているっぽい.
それらの変数は,config/overleaf.rc に書いてあります.
cat config/overleaf.rc|grep MONGO MONGO_ENABLED=true MONGO_DATA_PATH=data/mongo MONGO_IMAGE=mongo MONGO_VERSION=6.0
これらの変数のチェックは,lib/shared-function.sh で実施している模様.
grep Invalid * -R lib/shared-functions.sh: echo " Invalid MONGO_VERSION: $mongo_version"
そこの前後を見てみると,
else if [[ ! "$mongo_version" =~ ^([0-9]+)\.(.+)$ ]]; then echo "--------------------- ERROR -----------------------" echo " Invalid MONGO_VERSION: $mongo_version" echo "" echo " MONGO_VERSION must start with the actual major version of mongo, followed by a dot." echo " Example: MONGO_IMAGE=my.dockerhub.com/custom-mongo" echo " MONGO_VERSION=6.0-custom" echo "--------------------- ERROR -----------------------" exit 1 fi MONGO_VERSION_MAJOR=${BASH_REMATCH[1]}
となっていて,正規表現 ^([0-9]+)\.(.+)$ のチェックがMacでうまく行っていないっぽい.
で,$mongo_version の中身を見てみると,
local mongo_version=MONGO_VERSION=6.0
変数への代入文がそのまま出てきてしまっています.
色々と試行錯誤した結果,以下の結論となりました.
具体的には、あなたの overleaf.rc の行は MONGO_VERSION=6.0 ですが、sed -E "s/^MONGO_VERSION=(['\"]?)(.+)\1[[:space:]]*$/\2/p" は以下のような条件になっています: ^MONGO_VERSION= のあとに (['\"]?) → これはシングルクォート ' かダブルクォート " が 0回または1回 出てくることを期待 (.+) → そのあとに1文字以上(ここが実際の値) \1 → 最初に見つけたクォートと同じ文字がここに再登場することを期待(0回も可ではない) [[:space:]]*$ → 行末まで空白だけ つまり、クォートがない場合にも \1 の部分が「空文字」でマッチする必要があるのですが、macOS の sed(BSD sed)は GNU sed と違って、このケースの扱いがやや厳しく、 \1 が空だと後続のマッチが失敗することがあります。
具体的には,sed のオプションを-r から-Eへ変更して,1の後ろに「?」を追加すれば,動きます.
function read_configuration() { local name=$1 grep -E "^$name=" "$TOOLKIT_ROOT/config/overleaf.rc" \ | sed -E "s/^$name=([\"']?)(.+)\1?\$/\2/" }
コメントを残す