如何不修改Gemfile在Rails应用本地使用gem且不提交代码到Git
问题根因
你之前修改bin/rails的方案不生效,是因为Rails启动时Bundler会重置$LOAD_PATH,手动添加的gem路径会被清除,导致require失败。
可行方案(均不会修改版本控制内的代码,不影响其他协作者)
方案1:本地私有Gemfile方案(稳定可靠,适配所有启动场景,推荐)
- 在项目根目录创建
Gemfile.local,内容如下:
# 继承官方Gemfile的所有配置 instance_eval(File.read(File.expand_path('Gemfile', __dir__))) # 仅在本地开发环境添加你需要的gem group :development do gem 'meta_request' gem 'rack-mini-profiler' end
- 把私有Gemfile相关文件加入本地git排除列表,不会被提交:
echo "Gemfile.local" >> .git/info/exclude echo "Gemfile.local.lock" >> .git/info/exclude
- 安装本地依赖,之后用私有Gemfile启动服务即可:
BUNDLE_GEMFILE=Gemfile.local bundle install BUNDLE_GEMFILE=Gemfile.local bundle exec rails s
如果嫌每次输前缀麻烦,可以在你本地的shell配置文件(~/.zshrc/~/.bashrc)里加项目专属别名:
alias proj-rails='BUNDLE_GEMFILE=/path/to/your/project/Gemfile.local bundle exec rails'
之后直接用proj-rails s、proj-rails c等命令即可自动加载本地私有gem。
方案2:零侵入环境变量加载(无需修改项目内任何文件)
先本地安装依赖的两个gem:
gem install meta_request rack-mini-profiler
启动Rails服务时通过RUBYOPT环境变量预加载gem即可:
RUBYOPT="-r rack-mini-profiler -r meta_request" rails s
方案3:本地初始化文件方案
- 创建本地初始化文件
config/initializers/local_dev.rb,内容:
if Rails.env.development? begin require 'rack-mini-profiler' require 'meta_request' # 动态插入中间件 Rails.application.config.middleware.insert_before 0, Rack::MiniProfiler rescue LoadError # 无对应gem时静默跳过,不影响正常启动 end end
- 把该文件加入本地git排除:
echo "config/initializers/local_dev.rb" >> .git/info/exclude
内容的提问来源于stack exchange,提问作者Léonard Henriquez
相关产品推荐
相关产品推荐

