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