【问题标题】:Local rake tasks require development gems to be in production group本地 rake 任务需要开发 gems 在生产组中
【发布时间】:2018-06-20 18:02:23
【问题描述】:

我有一些只在本地执行的 rake 任务。但是,由于我在 rake 任务中引用了一些 gem 类,这似乎需要在生产服务器上安装和加载 gem。除其他外,这会增加服务器上的部署时间和内存使用量。

这可能与我的设置有关,也可能无关:

config.autoload_paths += Dir["#{config.root}/lib/**/"]

我有许多 lib 文件和子目录。

我想我的选择是

  • 将我所有的 lib 文件移动到其他地方并将该路径添加到 autoload_paths
  • 尝试从 autoload_paths 中排除任务目录
  • 在 rake 任务本身中做一些花哨的事情(如果可能的话),以避免需要有宝石。
  • 将 rake 任务配置到其他地方(似乎是个坏主意)

这似乎是一个很常见的问题,并且可能有解决或避免它的常用方法。我错过了什么?

【问题讨论】:

    标签: ruby-on-rails rubygems rake


    【解决方案1】:

    也许不是最令人兴奋的答案,但我只是将 require 'dev_gem' 移到了该任务的 rake task 块内。

    namespace :elasticbeanstalk do
      desc 'Creates a new web & worker environment pair for testing'
      task :create do
        require 'aws-sdk-elasticbeanstalk'
    
         # Do stuff with beanstalk that we wouldn't from a production env
      end
    end
    

    这样,库仅在调用 rake 任务时加载,而不是在定义 rake 任务时加载。

    【讨论】:

      【解决方案2】:

      这样做可能会奏效

      require "prod_gem_name"
      
      unless Rails.env.production?
        require 'dev_gem_name'
      
        desc "Task that run something with a dev gem"
        # code that uses the gem on dev group
      end
      

      或者另一种解决方案可能是将这些 .rake 文件添加到 gitignore。也许它不适用于所有情况,但这是另一种选择。

      【讨论】:

        猜你喜欢
        • 2010-12-25
        • 1970-01-01
        • 2015-07-28
        • 2015-10-05
        • 2014-12-05
        • 2016-01-05
        • 2015-10-29
        • 2011-05-12
        • 1970-01-01
        相关资源
        最近更新 更多