cron定时任务执行Fastlane命令提示Gem缺失相关问题咨询
问题解答
cron任务执行时使用的是极简环境变量,和你手动登录终端的环境变量不一致,这是你手动执行正常、cron执行报错的核心原因,四个问题的解答如下:
- 不需要修改Gemfile
你本地执行脚本正常,说明Gemfile已经正确声明了fastlane等依赖,报错和Gemfile内容无关。
- 不需要修改Gemfile
- 不需要使用sudo权限
sudo会切换到root用户的运行环境,和你普通用户下安装的gem路径完全不匹配,反而会加剧依赖找不到的问题,除非你的项目目录有特殊的权限限制,否则不要加sudo执行。
- 不需要使用sudo权限
- 确认路径正确的方法
- 先在你常用的终端执行
which bundle拿到bundler的绝对路径,比如返回值是/Users/xxx/.rbenv/shims/bundle,将脚本里的bundle替换为这个绝对路径 - 在脚本开头添加
echo $PATH >> /tmp/cron_run.log,cron执行后查看该日志的PATH内容,确认是否包含你安装ruby、gem的路径,缺失的话需要在脚本开头主动声明对应路径 - 脚本中的相对路径符号
~建议替换为用户目录的绝对路径,比如/Users/xxx/myProject/src,避免cron识别家目录出错
- 需要调整命令集,调整点如下:
- 脚本开头主动声明环境变量,比如用rbenv管理ruby的话,添加:
export PATH="$HOME/.rbenv/shims:$PATH";用rvm管理的话,添加对应rvm的环境路径 - 给
git pull添加--rebase参数,消除分支合并策略的提示 - 补充清理本地修改的逻辑,避免日志中
Podfile.lock和Info.plist的本地修改导致git操作失败 - 替换相对路径和bundler的绝对路径
调整后的参考脚本:
# 加载ruby环境变量,根据你本地的ruby管理工具调整 export PATH="$HOME/.rbenv/shims:$PATH" # 替换为你自己的项目绝对路径、bundle绝对路径,$1保留原分支参数 cd /Users/xxx/myProject/src && git reset --hard HEAD && git stash clear && git fetch --all && git pull --rebase && git checkout $1 && /Users/xxx/.rbenv/shims/bundle exec fastlane ios build build_type:adhoc build_env:dev
内容的提问来源于stack exchange,提问作者Jeff Bootsholz
相关产品推荐
相关产品推荐

