Rails,代码组织,保存map / reducer脚本的位置?

时间:2012-03-03 03:28:05

标签: ruby-on-rails mongodb

我知道这是一个奇怪的问题,但作为一个整洁的怪人,我想问一些专业人士关于组织我的代码的最佳实践。

所以我们几乎有~10个map / reduce任务(由MongoDB使用)通常都在后台运行(使用redis-scheduler),但是那里有相当多的代码,我不想要除非明确说明,否则加载它,如果我把它放在我的lib目录中,即使刚刚我的网络服务器启动它也不会在生产中的应用程序中加载?应用程序中没有用户操作的事实将使用该特定代码。

所以我的问题是,我应该把它们全部放在哪里,我应该如何组织它们?

1 个答案:

答案 0 :(得分:1)

我对Rails自动加载的理解是,在您第一次引用代码之前,代码不会被加载到内存中。例如,我创建了一个名为Thing的类:

# app/concerns/thing.rb
class Thing
  puts "Loaded Thing"
end

在创建Thing的实例:

之前,加载Rails控制台不会打印任何内容
[ruby-1.9.2-p290@so_test_app test_app: 505]$ rails c
Loading development environment (Rails 3.2.1)
1.9.2p290 :001 > Thing.new
Loaded Thing
#<Thing:0x000001039c81b0>
1.9.2p290 :002 > 

所以我说你可以安全地在lib下组织你的代码(假设你已将其添加到autoload_paths)而不会对内存中的代码占用产生负面影响。


编辑:嗯,我改变了主意。这些类确实在生产环境中的引导时加载:

[ruby-1.9.2-p290@so_test_app test_app: 508]$ rails c production
Loaded Thing
Loading production environment (Rails 3.2.1)
1.9.2p290 :001 > 

我必须多考虑一下。