ruby-on-rails - 在 Rails 应用程序中本地使用 gem 而不修改 Gemfile

标签 ruby-on-rails ruby git rubygems bundler

我需要在 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
    
  • Ajouter bin/rails丹斯.git/info/exclude

  • 注意:this thread的答案在这种情况下不起作用,因为 gem 需要是“必需的”。如何在不强制协作者的情况下在本地使用 gem?

    最佳答案

    解决方案1(易于理解但不通用)
    无需修改加载路径的快速解决方案。
    步骤 1,打开终端并运行此命令以获取要在本地使用的 gem 的完整路径:

    gem which GEM_NAME
    
    第二步,创建初始化文件local_dependencies.rbconfig/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.rbconfig/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/

    相关文章:

    ruby-on-rails - Capistrano 部署因 Capistrano-Harrow gem 的新请求而中断?

    ruby-on-rails - friendly_id slug 在更新时没有改变

    linux - git clone 和 cd 进去

    git - 使用 Github 组织插件检查 Jenkins 中的子模块

    ruby-on-rails - 如何使用 strong_params 要求嵌套参数

    ruby-on-rails - ruby 中的 Windows 命令

    ruby-on-rails - Mongoid 随机文档

    ruby - 在 Ruby 中使用括号括起一个 block ?

    python - 在 Python 中将表达式嵌入字符串的等价物是什么? (即 Ruby 中的 "#{expr}")

    git - 从 Git : "One of setGitDir or setWorkTree must be called" checkout 时出现 Hudson 错误