本地 rake 任务需要开发 gem 在生产组中

Local rake tasks require development gems to be in production group

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

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

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

我有一些lib文件和子目录。

我想我的选择是

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

这样做可能会奏效

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。也许它不适用于所有情况,但它是另一种选择。

也许不是最令人兴奋的答案,但我只是将 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 任务时加载。