ruby-on-rails – Rails 3.1:如何仅为Web应用程序运行初始化程
发布时间:2020-12-16 22:49:23 所属栏目:百科 来源:网络整理
导读:我的webapp需要加密其会话数据.我设置的是: config/initializers/encryptor.rb:require 'openssl'require 'myapp/encryptor'MyApp::Encryptor.config[ :random_key ] = OpenSSL::Random.random_bytes( 128 )Session.delete_allapp/models/session.rb:requir
我的webapp需要加密其会话数据.我设置的是:
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任务时,它会加载初始化程序并清除所有会话.不好! 我可以在初始化程序中放置什么来确保它仅用于webapp初始化?或者,我可以在初始化程序中添加什么来使其不用于rake任务? 更新:好的,我现在所做的是添加MYAPP_IN_RAKE = true除非定义了吗? 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脚本: if (MyApp.rake?) puts "In rake" else puts "Not in rake" end Rakefile的可编程特性为您提供了极大的灵活性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |