| Class | Merb::Config |
| In: |
merb-core/lib/merb-core/config.rb
merb-core/lib/merb-core/dispatch/session.rb |
| Parent: | Object |
| configuration | [RW] | :api: private |
Set configuration parameters from a code block, where each method evaluates to a config parameter.
| &block: | Configuration parameter block. |
# Set environment and log level.
Merb::Config.configure do
environment "development"
log_level "debug"
log_file Merb.root / "log" / "special.log"
end
nil
:api: public
# File merb-core/lib/merb-core/config.rb, line 428
428: def configure(&block)
429: ConfigBlock.new(self, &block) if block_given?
430: nil
431: end
Returns the hash of default config values for Merb.
| Hash: | The defaults for the config. |
:api: private
# File merb-core/lib/merb-core/config.rb, line 15
15: def defaults
16: @defaults ||= {
17: :host => "0.0.0.0",
18: :port => "4000",
19: :adapter => "runner",
20: :reload_classes => true,
21: :fork_for_class_load => Merb.forking_environment?,
22: :environment => "development",
23: :merb_root => Dir.pwd,
24: :use_mutex => true,
25: :log_delimiter => " ~ ",
26: :log_auto_flush => false,
27: :log_level => :info,
28: :log_stream => STDOUT,
29: :disabled_components => Merb.on_windows? ? [:signals] : [],
30: :deferred_actions => [],
31: :verbose => false,
32: :name => "merb"
33: }
34: end
Retrieve the value of a config entry, returning the provided default if the key is not present
| key<Object>: | The key to retrieve the parameter for. |
| default<Object>: | The default value to return if the parameter is not set. |
| Object: | The value of the configuration parameter or the default. |
:api: public
# File merb-core/lib/merb-core/config.rb, line 118
118: def fetch(key, default)
119: @configuration.fetch(key, default)
120: end
Allows retrieval of single key config values via Merb.config.<key> Allows single key assignment via Merb.config.<key> = …
| method<~to_s>: | Method name as hash key value. |
| *args: | Value to set the configuration parameter to. |
The value of the entry fetched or assigned to.
:api: public
# File merb-core/lib/merb-core/config.rb, line 444
444: def method_missing(method, *args)
445: if method.to_s[-1,1] == '='
446: @configuration[method.to_s.tr('=','').to_sym] = *args
447: else
448: @configuration[method]
449: end
450: end
Parses the command line arguments and stores them in the config.
| argv<String>: | The command line arguments. Defaults to ARGV. |
The configuration as a hash.
:api: private
# File merb-core/lib/merb-core/config.rb, line 181
181: def parse_args(argv = ARGV)
182: @configuration ||= {}
183: # Our primary configuration hash for the length of this method
184: options = {}
185:
186: # Environment variables always win
187: options[:environment] = ENV["MERB_ENV"] if ENV["MERB_ENV"]
188:
189: # Build a parser for the command line arguments
190: opts = OptionParser.new do |opts|
191: opts.version = Merb::VERSION
192:
193: opts.banner = "Usage: merb [uGdcIpPhmailLerkKX] [argument]"
194: opts.define_head "Merb. Pocket rocket web framework"
195: opts.separator '*' * 80
196: opts.separator "If no flags are given, Merb starts in the " \
197: "foreground on port 4000."
198: opts.separator '*' * 80
199:
200: opts.on("-u", "--user USER", "This flag is for having merb run " \
201: "as a user other than the one currently logged in. Note: " \
202: "if you set this you must also provide a --group option " \
203: "for it to take effect.") do |user|
204: options[:user] = user
205: end
206:
207: opts.on("-G", "--group GROUP", "This flag is for having merb run " \
208: "as a group other than the one currently logged in. Note: " \
209: "if you set this you must also provide a --user option " \
210: "for it to take effect.") do |group|
211: options[:group] = group
212: end
213:
214: opts.on("-d", "--daemonize", "This will run a single merb in the " \
215: "background.") do |daemon|
216: options[:daemonize] = true
217: end
218:
219: opts.on("-N", "--no-daemonize", "This will allow you to run a " \
220: "cluster in console mode") do |no_daemon|
221: options[:daemonize] = false
222: end
223:
224: opts.on("-c", "--cluster-nodes NUM_MERBS", Integer,
225: "Number of merb daemons to run.") do |nodes|
226: options[:daemonize] = true unless options.key?(:daemonize)
227: options[:cluster] = nodes
228: end
229:
230: opts.on("-I", "--init-file FILE", "File to use for initialization " \
231: "on load, defaults to config/init.rb") do |init_file|
232: options[:init_file] = init_file
233: end
234:
235: opts.on("-p", "--port PORTNUM", Integer, "Port to run merb on, " \
236: "defaults to 4000.") do |port|
237: options[:port] = port
238: end
239:
240: opts.on("-o", "--socket-file FILE", "Socket file to run merb on, " \
241: "defaults to [Merb.root]/log/merb.sock. This is for " \
242: "web servers, like thin, that use sockets." \
243: "Specify this *only* if you *must*.") do |port|
244: options[:socket_file] = port
245: end
246:
247: opts.on("-s", "--socket SOCKNUM", Integer, "Socket number to run " \
248: "merb on, defaults to 0.") do |port|
249: options[:socket] = port
250: end
251:
252: opts.on("-n", "--name NAME", String, "Set the name of the application. "\
253: "This is used in the process title and log file names.") do |name|
254: options[:name] = name
255: end
256:
257: opts.on("-P", "--pid PIDFILE", "PID file, defaults to " \
258: "[Merb.root]/log/merb.main.pid for the master process and" \
259: "[Merb.root]/log/merb.[port number].pid for worker " \
260: "processes. For clusters, use %s to specify where " \
261: "in the file merb should place the port number. For " \
262: "instance: -P myapp.%s.pid") do |pid_file|
263: options[:pid_file] = pid_file
264: end
265:
266: opts.on("-h", "--host HOSTNAME", "Host to bind to " \
267: "(default is 0.0.0.0).") do |host|
268: options[:host] = host
269: end
270:
271: opts.on("-m", "--merb-root /path/to/approot", "The path to the " \
272: "Merb.root for the app you want to run " \
273: "(default is current working directory).") do |root|
274: options[:merb_root] = File.expand_path(root)
275: end
276:
277: adapters = [:mongrel, :emongrel, :thin, :ebb, :fastcgi, :webrick]
278:
279: opts.on("-a", "--adapter ADAPTER",
280: "The rack adapter to use to run merb (default is mongrel)" \
281: "[#{adapters.join(', ')}]") do |adapter|
282: options[:adapter] ||= adapter
283: end
284:
285: opts.on("-R", "--rackup FILE", "Load an alternate Rack config " \
286: "file (default is config/rack.rb)") do |rackup|
287: options[:rackup] = rackup
288: end
289:
290: opts.on("-i", "--irb-console", "This flag will start merb in " \
291: "irb console mode. All your models and other classes will " \
292: "be available for you in an irb session.") do |console|
293: options[:adapter] = 'irb'
294: end
295:
296: opts.on("-S", "--sandbox", "This flag will enable a sandboxed irb " \
297: "console. If your ORM supports transactions, all edits will " \
298: "be rolled back on exit.") do |sandbox|
299: options[:sandbox] = true
300: end
301:
302: opts.on("-l", "--log-level LEVEL", "Log levels can be set to any of " \
303: "these options: debug < info < warn < error < " \
304: "fatal (default is info)") do |log_level|
305: options[:log_level] = log_level.to_sym
306: options[:force_logging] = true
307: end
308:
309: opts.on("-L", "--log LOGFILE", "A string representing the logfile to " \
310: "use. Defaults to [Merb.root]/log/merb.[main].log for the " \
311: "master process and [Merb.root]/log/merb[port number].log" \
312: "for worker processes") do |log_file|
313: options[:log_file] = log_file
314: options[:force_logging] = true
315: end
316:
317: opts.on("-e", "--environment STRING", "Environment to run Merb " \
318: "under [development, production, testing] " \
319: "(default is development)") do |env|
320: options[:environment] = env
321: end
322:
323: opts.on("-r", "--script-runner ['RUBY CODE'| FULL_SCRIPT_PATH]",
324: "Command-line option to run scripts and/or code in the " \
325: "merb app.") do |code_or_file|
326: options[:runner_code] = code_or_file
327: options[:adapter] = 'runner'
328: end
329:
330: opts.on("-K", "--graceful PORT or all", "Gracefully kill one " \
331: "merb proceses by port number. Use merb -K all to " \
332: "gracefully kill all merbs.") do |ports|
333: options[:action] = :kill
334: ports = "main" if ports == "all"
335: options[:port] = ports
336: end
337:
338: opts.on("-k", "--kill PORT", "Force kill one merb worker " \
339: "by port number. This will cause the worker to" \
340: "be respawned.") do |port|
341: options[:action] = :kill_9
342: port = "main" if port == "all"
343: options[:port] = port
344: end
345:
346: opts.on("--fast-deploy", "Reload the code, but not your" \
347: "init.rb or gems") do
348: options[:action] = :fast_deploy
349: end
350:
351: # @todo Do we really need this flag? It seems unlikely to want to
352: # change the mutex from the command-line.
353: opts.on("-X", "--mutex on/off", "This flag is for turning the " \
354: "mutex lock on and off.") do |mutex|
355: if mutex == "off"
356: options[:use_mutex] = false
357: else
358: options[:use_mutex] = true
359: end
360: end
361:
362: opts.on("-D", "--debugger", "Run merb using rDebug.") do
363: begin
364: require "ruby-debug"
365: Debugger.start
366:
367: # Load up any .rdebugrc files we find
368: [".", ENV["HOME"], ENV["HOMEPATH"]].each do |script_dir|
369: script_file = "#{script_dir}/.rdebugrc"
370: Debugger.run_script script_file, StringIO.new if File.exists?(script_file)
371: end
372:
373: if Debugger.respond_to?(:settings)
374: Debugger.settings[:autoeval] = true
375: end
376: puts "Debugger enabled"
377: rescue LoadError
378: puts "You need to install ruby-debug to run the server in " \
379: "debugging mode. With gems, use `gem install ruby-debug'"
380: exit
381: end
382: end
383:
384: opts.on("-V", "--verbose", "Print extra information") do
385: options[:verbose] = true
386: end
387:
388: opts.on("-C", "--console-trap", "Enter an irb console on ^C") do
389: options[:console_trap] = true
390: end
391:
392: opts.on("-?", "-H", "--help", "Show this help message") do
393: puts opts
394: exit
395: end
396: end
397:
398: # Parse what we have on the command line
399: begin
400: opts.parse!(argv)
401: rescue OptionParser::InvalidOption => e
402: Merb.fatal! e.message, e
403: end
404: Merb::Config.setup(options)
405: end
Returns stores list constructed from configured session stores (:session_stores config option) or default one (:session_store config option).
:api: private
# File merb-core/lib/merb-core/dispatch/session.rb, line 11
11: def self.session_stores
12: @session_stores ||= begin
13: config_stores = Array(
14: Merb::Config[:session_stores] || Merb::Config[:session_store]
15: )
16: config_stores.map { |name| name.to_sym }
17: end
18: end
Sets up the configuration by storing the given settings.
| settings<Hash>: | Configuration settings to use. These are merged with the defaults. |
The configuration as a hash.
:api: private
# File merb-core/lib/merb-core/config.rb, line 153
153: def setup(settings = {})
154: config = defaults.merge(settings)
155:
156: unless config[:reload_classes]
157: config[:fork_for_class_load] = false
158: end
159:
160: dev_mode = config[:environment] == "development"
161: unless config.key?(:reap_workers_quickly)
162: config[:reap_workers_quickly] = dev_mode & !config[:cluster]
163: end
164:
165: unless config.key?(:bind_fail_fatal)
166: config[:bind_fail_fatal] = dev_mode
167: end
168:
169: @configuration = config
170: end
Yields the configuration.
| c<Hash>: | The configuration parameters. |
Merb::Config.use do |config|
config[:exception_details] = false
config[:log_stream] = STDOUT
end
nil
:api: public
# File merb-core/lib/merb-core/config.rb, line 51
51: def use
52: @configuration ||= {}
53: yield @configuration
54: nil
55: end