merged cont.
[opensuse:yast-rest-service.git] / webservice / config / environment.rb
1 #--
2 # Webyast Webservice framework
3 #
4 # Copyright (C) 2009, 2010 Novell, Inc. 
5 #   This library is free software; you can redistribute it and/or modify
6 # it only under the terms of version 2.1 of the GNU Lesser General Public
7 # License as published by the Free Software Foundation. 
8 #
9 #   This library is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
12 # details. 
13 #
14 #   You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software 
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 #++
18
19 # Be sure to restart your server when you modify this file
20
21 # Uncomment below to force Rails into production mode when
22 # you don't control web/app server and can't set it the proper way
23 # ENV['RAILS_ENV'] ||= 'production'
24
25 # Hmm, don't know if this is the right place for this
26 # but http://groups.google.com/group/sdruby/browse_thread/thread/5239824b058ac936 doesn't know any better
27 #
28 # Apparently, webrick sets it, while "rake test" doesn't.
29 #
30 RAILS_ENV = ENV['RAILS_ENV'] unless defined? RAILS_ENV
31
32 STDERR.puts "\n\n\t***RAILS_ENV environment variable isn't set !\n\n" unless RAILS_ENV
33
34 # Specifies gem version of Rails to use when vendor/rails is not present
35 # RAILS_GEM_VERSION = '2.1.0' unless defined? RAILS_GEM_VERSION
36
37 # Bootstrap the Rails environment, frameworks, and default configuration
38 require File.join(File.dirname(__FILE__), 'boot')
39
40 # mutex block for starting the worker AFTER all jobs have been inserted
41 delay_job_mutex = Mutex::new
42
43
44 init = Rails::Initializer.run do |config|
45
46   #Set JSMIN constant to true/false 
47   #true: load minified javascript files for speed up
48   #false: load source javascript files for debugging
49   JSMIN = true
50
51   #just for test
52   #ENV['DISABLE_INITIALIZER_FROM_RAKE'] = 'false'
53   
54   # Settings in config/environments/* take precedence over those specified here.
55   # Application configuration should go into files in config/initializers
56   # -- all .rb files in that directory are automatically loaded.
57   # See Rails::Configuration for more options.
58
59   # Skip frameworks you're not going to use. To use Rails without a database
60   # you must remove the Active Record framework.
61   # config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
62
63   # Specify gems that this application depends on. 
64   # They can then be installed with "rake gems:install" on new installations.
65   # config.gem "bj"
66   # config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
67   # config.gem "aws-s3", :lib => "aws/s3"
68
69   # Only load the plugins named here, in the order given. By default, all plugins 
70   # in vendor/plugins are loaded in alphabetical order.
71   # :all can be used as a placeholder for all plugins not explicitly named
72   # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
73
74   # Add additional load paths for your own custom dirs
75   #config.load_paths += %W( #{RAILS_ROOT}/vendor/plugins/systemtime )
76
77   # Force all environments to use the same logger level
78   # (by default production uses :info, the others :debug)
79   # config.log_level = :debug
80
81   # Make Time.zone default to the specified zone, and make Active Record store time values
82   # in the database in UTC, and return them converted to the specified local zone.
83   # Run "rake -D time" for a list of tasks for finding time zone names. Uncomment to use default local time.
84   config.time_zone = 'UTC'
85
86   # Your secret key for verifying cookie session data integrity.
87   # If you change this key, all old sessions will become invalid!
88   # Make sure the secret is at least 30 characters and all random, 
89   # no regular words or you'll be exposed to dictionary attacks.
90   config.action_controller.session = {
91     :key => '_yast-api_session',
92     # It is overwritten during install time (bnc#550635), do not change key # RORSCAN_INL
93     :secret      => '9d11bfc98abcf9799082d9c34ec94dc1cc926f0f1bf4bea8c440b497d96b14c1f712c8784d0303ee7dd69e382c3e5e4d38d4c56d1b619eae7acaa6516cd733b1'
94   }
95
96   # Use the database for sessions instead of the cookie-based default,
97   # which shouldn't be used to store highly confidential information
98   # (create the session table with "rake db:sessions:create")
99   # config.action_controller.session_store = :active_record_store
100
101   # Use SQL instead of Active Record's schema dumper when creating the test database.
102   # This is necessary if your schema can't be completely dumped by the schema dumper,
103   # like if you have constraints or database-specific column types
104   # config.active_record.schema_format = :sql
105
106   # Activate observers that should always be running
107   # config.active_record.observers = :cacher, :garbage_collector
108
109   # reload all plugins, changes in *.rb files take effect immediately
110   # it's here because of https://rails.lighthouseapp.com/projects/8994/tickets/2324-configreload_plugins-true-only-works-in-environmentrb
111   config.reload_plugins = true if ENV['RAILS_ENV'] == 'development'
112
113   # In order to prevent unloading of AuthenticatedSystem
114   config.load_once_paths += %W( #{RAILS_ROOT}/lib )
115
116   # allows to find plugin in development tree locations
117   # avoiding installing plugins to see them
118   config.plugin_paths << File.join(RAILS_ROOT, '..', 'plugins') if ENV['RAILS_ENV'] != "production"
119
120   # add extra plugin path - needed during RPM build
121   # (webyast-base-ws is already installed in /srv/www/... but plugins are
122   # located in /usr/src/packages/... during build)
123   config.plugin_paths << '/usr/src/packages/BUILD' unless ENV['ADD_BUILD_PATH'].nil?
124
125   config.after_initialize do
126     YastCache.active = config.action_controller.perform_caching 
127     unless ENV['RAILS_ENV'] == 'test'
128       delay_job_mutex.lock
129       if ENV["RUN_WORKER"] && YastCache.active
130         Thread::new do 
131           ENV["RUN_WORKER"] = 'false'
132           delay_job_mutex.lock #do not start before all jobs have been inserted
133           Delayed::Worker.new.start 
134         end
135       end
136     end
137   end
138 end
139
140 # don't load all plugins while just testing resource registration
141 unless defined? RESOURCE_REGISTRATION_TESTING
142   STDERR.puts "\n*** registering plugins ***\n"
143   # load lib/resource_registration.rb
144   require "resource_registration"
145
146   init.loaded_plugins.each do |plugin|
147     ResourceRegistration.register_plugin(plugin)
148   end
149   
150   ResourceRegistration.route ResourceRegistration.resources
151
152 end
153
154 # load global role assignments unless we're testing them
155 unless defined? PERMISSION_CHECK_TESTING
156   
157   USER_ROLES_CONFIG = "/etc/yast_user_roles"    
158
159 end
160
161 # look for all existing loaded plugin's public/ directories
162 plugin_assets = init.loaded_plugins.map { |plugin| File.join(plugin.directory, 'public') }.reject { |dir| not (File.directory?(dir) and File.exist?(dir)) }
163
164 require 'yast/rack/static_overlay'
165 init.configuration.middleware.use YaST::Rack::StaticOverlay, :roots => plugin_assets
166
167
168 unless ENV['RAILS_ENV'] == 'test'
169   #check if table for caches exist and cache is active
170   if ActiveRecord::Base.connection.tables.include?('data_caches') &&
171      ActiveRecord::Base.connection.tables.include?('delayed_jobs') &&
172      YastCache.active
173
174     #remove cache information 
175     DataCache.delete_all
176     #Construct initial job queue in order to fillup the cache
177     Delayed::Job.delete_all
178     resources = Resource.find :all
179     resources.each  do |resource|
180       name = resource.href.split("/").last
181       if resource.cache_enabled
182         job_key = YastCache.find_key(name)
183         if !job_key.blank?
184           job_key += ":" + resource.cache_arguments unless resource.cache_arguments.blank?
185           STDERR.puts "Inserting job #{job_key} with priority #{resource.cache_priority}"
186           Delayed::Job.enqueue(PluginJob.new(job_key), resource.cache_priority)
187         else
188           STDERR.puts "Ignoring job #{name}:find* (not runable)"
189         end
190       else
191         STDERR.puts "Ignoring job #{name}:find (configured)"
192       end
193     end
194     #added special request for none plugins
195     key = "Permission:find::all"
196     STDERR.puts "Inserting job #{key}"
197     Delayed::Job.enqueue(PluginJob.new(key), 0)
198     key = 'Permission:find::all:{"with_description"=>"1"}'
199     STDERR.puts "Inserting job #{key}"
200     Delayed::Job.enqueue(PluginJob.new(key), 0)
201     key = "getentpasswd:find"
202     STDERR.puts "Inserting job #{key}"
203     Delayed::Job.enqueue(PluginJob.new(key), -3)
204     delay_job_mutex.unlock #start delay job worker
205   end
206 end
207
208 # Enforce https and pass cookie only via https
209 ActionController::Base.session_options[:session_secure] = true if ENV['RAILS_ENV'] == 'production'
210
211 # save loaded plugins, which are used to scan shortcuts laters
212 module YaST
213 end
214 YaST::LOADED_PLUGINS = init.loaded_plugins
215
216 # look for all existing loaded plugin's public/ directories
217 plugin_assets = init.loaded_plugins.map { |plugin| File.join(plugin.directory, 'public') }.reject { |dir| not (File.directory?(dir) and File.exist?(dir)) }
218 init.configuration.middleware.use YaST::Rack::StaticOverlay, :roots => plugin_assets