我知道这是一个奇怪的问题,但作为一个整洁的怪人,我想问一些专业人士关于组织我的代码的最佳实践。
所以我们几乎有~10个map / reduce任务(由MongoDB使用)通常都在后台运行(使用redis-scheduler),但是那里有相当多的代码,我不想要除非明确说明,否则加载它,如果我把它放在我的lib
目录中,即使刚刚我的网络服务器启动它也不会在生产中的应用程序中加载?应用程序中没有用户操作的事实将使用该特定代码。
所以我的问题是,我应该把它们全部放在哪里,我应该如何组织它们?
答案 0 :(得分:1)
我对Rails自动加载的理解是,在您第一次引用代码之前,代码不会被加载到内存中。例如,我创建了一个名为Thing
的类:
# app/concerns/thing.rb
class Thing
puts "Loaded Thing"
end
在创建Thing
的实例:
[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 >
我必须多考虑一下。