本地 rake 任务需要开发 gem 在生产组中
Local rake tasks require development gems to be in production group
我有一些只在本地执行的佣金任务。然而,由于我在 rake 任务中引用了一些 gem 类,这似乎需要在生产服务器上安装和加载 gem。除其他外,这会增加服务器上的部署时间和内存使用量。
这可能与我的设置有关也可能无关:
config.autoload_paths += Dir["#{config.root}/lib/**/"]
我有一些lib文件和子目录。
我想我的选择是
- 将我所有的 lib 文件移到其他地方并将该路径添加到 autoload_paths
- 尝试从 autoload_paths
中排除任务目录
- 在 rake 任务本身做一些花哨的事情(如果可能的话)以避免需要 gems 在场。
- 将 rake 任务配置到其他地方(似乎是个坏主意)
这似乎是一个很常见的问题,可能有解决或避免它的通用方法。我错过了什么?
这样做可能会奏效
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 任务时加载。
我有一些只在本地执行的佣金任务。然而,由于我在 rake 任务中引用了一些 gem 类,这似乎需要在生产服务器上安装和加载 gem。除其他外,这会增加服务器上的部署时间和内存使用量。
这可能与我的设置有关也可能无关:
config.autoload_paths += Dir["#{config.root}/lib/**/"]
我有一些lib文件和子目录。
我想我的选择是
- 将我所有的 lib 文件移到其他地方并将该路径添加到 autoload_paths
- 尝试从 autoload_paths 中排除任务目录
- 在 rake 任务本身做一些花哨的事情(如果可能的话)以避免需要 gems 在场。
- 将 rake 任务配置到其他地方(似乎是个坏主意)
这似乎是一个很常见的问题,可能有解决或避免它的通用方法。我错过了什么?
这样做可能会奏效
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 任务时加载。