我的网络应用程序需要加密其会话数据。我设置的是:
config/initializers/encryptor.rb:
require 'openssl'
require 'myapp/encryptor'
MyApp::Encryptor.config[ :random_key ] = OpenSSL::Random.random_bytes( 128 )
Session.delete_all
app/models/session.rb:
require 'attr_encrypted'
class Session < ActiveRecord::Base
attr_accessible :session_id, :data
attr_encryptor :data, :key => proc { MyApp::Encryptor.config[ :random_key ] }, :marshal => true
# Rest of model stuff
end
这一切都很好,并且可以保证会话数据的安全。问题是:当我运行自定义 rake 任务时,它会加载初始化程序并清除所有会话。不好!
我可以在初始化程序中放入什么以确保它仅针对 web 应用程序初始化运行?或者,我可以在初始化程序中放入什么以使其不运行 rake 任务?
Update:好的,我现在所做的是添加MYAPP_IN_RAKE = true unless defined? MYAPP_IN_RAKE
到我的 .rake 文件。然后在我的初始化程序中我这样做:
unless defined?( MYAPP_IN_RAKE ) && MYAPP_IN_RAKE
# Web only initialization
end
似乎有效。但我愿意接受其他建议。
您可以在“config/application.rb”中对应用程序进行修改,如下所示:
module MyApp
def self.rake?
!!@rake
end
def self.rake=(value)
@rake = !!value
end
然后在你的Rakefile
你会添加这个:
MyApp.rake = true
最好使用方法而不是常量,因为有时您更愿意稍后更改或重新定义它们。另外,它们不会污染根命名空间。
这是一个示例config/initializers/rake_environment_test.rb
script:
if (MyApp.rake?)
puts "In rake"
else
puts "Not in rake"
end
的可编程性质Rakefile
为您提供显着的灵活性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)