我需要在 rails 应用程序中本地使用 gem ( Rails Panel ) 无需添加代码 至 git
.
我无法在版本控制中修改代码的原因是我的团队对添加新 gem 有非常严格的政策。但是,这并不理想,但如果需要,我可以从版本控制中排除文件。
我尝试了以下解决方案,但不起作用:
gem install meta_request
bin/rails
使用以下代码:#!/usr/bin/env ruby
# original code [...]
gems = %w[meta_request]
gem_home = ENV['GEM_HOME']
gem_dir = Dir["#{gem_home}/gems/*/lib"]
gems.each do |gem|
gem_path = gem_dir.select { |r| r.include?(gem) }
$LOAD_PATH.append(*gem_path)
require gem
end
bin/rails
丹斯.git/info/exclude
注意:this thread的答案在这种情况下不起作用,因为 gem 需要是“必需的”。如何在不强制协作者的情况下在本地使用 gem?
最佳答案
解决方案1(易于理解但不通用)
无需修改加载路径的快速解决方案。
步骤 1,打开终端并运行此命令以获取要在本地使用的 gem 的完整路径:
gem which GEM_NAME
第二步,创建初始化文件local_dependencies.rb
在 config/initializers/
并在文件中要求您的 gem(s),如下所示:# file: config/initializers/local_dependencies.rb
require 'GEM_FULL_PATH'
第三步,编辑.git/info/exclude
并排除 local_dependencies.rb
文件:# file: .git/info/exclude
config/initializers/local_dependencies.rb
全部完成!解决方案 2
这是一个更通用的解决方案,虽然这两个解决方案都绕过了 bundler,但优点是您不必更新 Gemfile。
创建初始化文件
local_dependencies.rb
在 config/initializers/
并添加以下代码:gems = {
'meta_request' => '0.7.2',
}
gem_home = ENV['GEM_HOME']
gems.each do |gem_name, version|
gem_path = "#{gem_home}/gems/#{gem_name}-#{version}/lib"
raise "GemNotFound: name: #{gem_name}, version: #{version}" unless File.directory?(gem_path)
$LOAD_PATH << gem_path
require gem_name
end
编辑 .git/info/exclude
并排除 local_dependencies.rb
文件:# file: .git/info/exclude
config/initializers/local_dependencies.rb
全部完成!
关于ruby-on-rails - 在 Rails 应用程序中本地使用 gem 而不修改 Gemfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68967144/