如题,使用 Netlify 自动拉取仓库中的 Jekyll 博客源码进行发布,记录遇到的问题。
坑一:master还是main
GitHub 近年来将新的仓库默认主分支从 master 改为了 main。我本地初始化时还是 master,推送到 GitHub 后,又想统一为 main。
此处仅需简单折腾一下:
- 本地重命名:
git branch -m master main(将本地的master重命名为main) - 推送新分支:
git push -u origin main(将本地的main分支推送到远程并建立跟踪) - GitHub 网站设置:在 GitHub 仓库的
Settings->Branches中,将Default branch修改为main。 - 删除远程旧分支:
git push origin --delete master - Netlify 检查:确保 Netlify 部署设置中的分支也更新为了
main。
坑二:Netlify 构建报错bundle exec jekyll build
最折磨的环节,幸好 Netlify 的部署日志自带 AI 分析。
报错信息:
Error message
Command failed with exit code 1: bundle exec jekyll build
...
Error mentions missing dependencies logger and csv in the Gemfile.
# Netlify 自带的 AI 告诉我的,这个整得挺好
原因分析:
Netlify 用了较新的 Ruby 版本,乍一看应该是 3.4,它要求一些以前默认包含的 gem在 Gemfile 中显式声明。我的本地环境估计因为 Ruby 版本较老就没有这个问题,毕竟我抄的这个主题发布很多年了。
解决方法:
- 编辑
Gemfile: 在项目根目录的Gemfile文件中添加缺失的 gem:gem "logger" gem "csv" gem "base64" gem "bigdecimal" - 更新
Gemfile.lock: 在主目录下运行bundle install。它会根据Gemfile的改动更新Gemfile.lock,确保依赖版本一致。 - 提交更改:
git add Gemfile Gemfile.lock git commit -m "Update Gemfile for Netlify build" git push origin mainNetlify 会自动拉取最新代码并重新构建。
其实也可以在项目根目录添加一个 .ruby-version 文件,内容希望使用的 Ruby 版本号(如2.7.2),并提交到仓库。Netlify 会读取这个文件来确定构建时使用的 Ruby 版本。
坑三:bundle install 慢得要命
在本地执行 bundle install 时等待时间很长。
原因: bundle install默认从https://rubygems.org/下载 gem 包,因为众所周知的原因,国内访问速度十分感人。
解决方法:更换 RubyGems 源为国内镜像源。
在项目目录下执行:
bundle config mirror.https://rubygems.org https://gems.ruby-china.com
#或者使用其他国内镜像,如清华大学源
这会在项目内生成一个 .bundle/config 文件,只对当前项目生效。
或者,也可以直接改动 Gemfile 中的第一行:
source "https://rubygems.org"
#改为
source "https://gems.ruby-china.com"
然后再次运行 bundle install,速度飞起。
git 也有相似问题,push 到远程仓库 push 不动。不过这个需要一点科学上网技巧。具体操作如下:
git config --global http.proxy http://127.0.0.1:10809
git config --global https.proxy http://127.0.0.1:10809
懂的都懂,不谈嘛。
最终 Gemfile
Netlify 报错是每加一个 Gem 就报一个新的,最后总共加了logger,csv,base64和bigdecimal四行,如果图省事想用 Netlify 还不指定版本,可以参考我的 Gemfile 一次全加上:
source "https://gems.ruby-china.com"
gem "jekyll", "3.9.5"
gem "wdm", ">= 0.2.0"
gem "kramdown-parser-gfm", "~> 1.1"
gem "webrick", "~> 1.8"
gem "jekyll-regex-replace", "~> 1.1"
gem "logger"
gem "csv"
gem "base64"
gem "bigdecimal"