如何让Rails生产环境不读取系统默认的VERSION环境变量?
解决Rails迁移时被全局VERSION环境变量干扰的问题
这种环境变量冲突确实挺头疼的,不用每次手动unset VERSION的话,给你几个实用的解决方案:
1. 单命令临时覆盖环境变量
直接在执行迁移命令前清空VERSION变量,只对当前这一次命令生效,不用改任何配置:
VERSION= bundle exec rake db:migrate
原理是命令行前缀的环境变量设置会临时覆盖当前shell的全局变量,执行完命令后shell里的VERSION还是原来的7,不影响其他操作。
2. 全局移除登录时的VERSION变量
既然每次SSH登录都会自动设置VERSION=7,那我们可以在shell的登录配置里清除它:
- 如果用的是bash,编辑
~/.bashrc或者~/.bash_profile(取决于你的服务器加载哪个文件),在文件末尾添加一行:unset VERSION - 保存后,重新登录SSH或者执行
source ~/.bashrc(对应你编辑的文件)就能生效,之后每次登录shell都不会有这个变量了。 - 进阶:如果想找到这个变量到底是在哪被设置的,可以执行这个命令搜索配置文件:
找到后直接删掉对应的设置行,比unset更彻底。grep -r "VERSION=7" /etc/profile.d/ ~/.bash* ~/.profile
3. 针对Rails项目单独屏蔽
如果不想改动服务器的全局配置,只想让这个Rails项目不受影响,可以在项目的config/application.rb中添加一行代码,在Rails启动前移除这个环境变量:
# 在文件开头(比如Bundler.require之后)添加 ENV.delete('VERSION')
这样只要这个Rails应用启动,就会自动清除VERSION变量,不管shell环境里有没有设置,迁移命令自然就不会触发版本错误了。
内容的提问来源于stack exchange,提问作者dp7
相关产品推荐
相关产品推荐

