warbler 1.3.2 → 1.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/.gitignore +4 -0
  2. data/.travis.yml +7 -0
  3. data/Gemfile +2 -3
  4. data/Gemfile.lock +35 -0
  5. data/History.txt +21 -1
  6. data/LICENSE.txt +1 -1
  7. data/{README.txt → README.rdoc} +27 -13
  8. data/Rakefile +31 -38
  9. data/lib/warbler/application.rb +1 -1
  10. data/lib/warbler/config.rb +1 -1
  11. data/lib/warbler/gems.rb +1 -1
  12. data/lib/warbler/jar.rb +4 -11
  13. data/lib/warbler/pathmap_helper.rb +20 -0
  14. data/lib/warbler/rake_helper.rb +1 -1
  15. data/lib/warbler/task.rb +1 -1
  16. data/lib/warbler/templates/bundler.erb +0 -1
  17. data/lib/warbler/templates/jar.erb +3 -0
  18. data/lib/warbler/templates/war.erb +5 -0
  19. data/lib/warbler/traits/bundler.rb +46 -17
  20. data/lib/warbler/traits/gemspec.rb +5 -4
  21. data/lib/warbler/traits/jar.rb +1 -1
  22. data/lib/warbler/traits/merb.rb +1 -1
  23. data/lib/warbler/traits/nogemspec.rb +3 -2
  24. data/lib/warbler/traits/rack.rb +1 -1
  25. data/lib/warbler/traits/rails.rb +3 -2
  26. data/lib/warbler/traits/war.rb +31 -6
  27. data/lib/warbler/traits.rb +1 -1
  28. data/lib/warbler/version.rb +2 -2
  29. data/lib/warbler/war.rb +1 -1
  30. data/lib/warbler.rb +2 -1
  31. data/lib/warbler_jar.jar +0 -0
  32. data/spec/drb_helper.rb +12 -2
  33. data/spec/sample_bundler/.bundle/config +5 -0
  34. data/spec/sample_bundler/Gemfile +3 -0
  35. data/spec/sample_bundler/vendor/bundle/jruby/1.8/bin/rake +19 -0
  36. data/spec/sample_bundler/vendor/bundle/jruby/1.8/gems/rake-0.8.7/bin/rake +31 -0
  37. data/spec/sample_bundler/vendor/bundle/ruby/1.8/bin/rake +19 -0
  38. data/spec/sample_bundler/vendor/bundle/ruby/1.8/gems/rake-0.8.7/bin/rake +31 -0
  39. data/spec/sample_bundler/vendor/bundle/ruby/1.9.1/bin/rake +19 -0
  40. data/spec/sample_bundler/vendor/bundle/ruby/1.9.1/gems/rake-0.8.7/bin/rake +31 -0
  41. data/spec/sample_jar/Rakefile +23 -0
  42. data/spec/sample_jar/bin/sample_jar +5 -0
  43. data/spec/sample_jar/sample_jar.gemspec +8 -18
  44. data/spec/sample_war/README +256 -0
  45. data/spec/sample_war/Rakefile +11 -0
  46. data/spec/spec.opts +1 -0
  47. data/spec/spec_helper.rb +27 -10
  48. data/spec/warbler/application_spec.rb +4 -5
  49. data/spec/warbler/bundler_spec.rb +29 -7
  50. data/spec/warbler/config_spec.rb +1 -1
  51. data/spec/warbler/gems_spec.rb +1 -1
  52. data/spec/warbler/jar_spec.rb +29 -6
  53. data/spec/warbler/task_spec.rb +16 -7
  54. data/spec/warbler/traits_spec.rb +1 -1
  55. data/spec/warbler/war_spec.rb +1 -1
  56. data/warble.rb +2 -0
  57. data/warbler.gemspec +31 -0
  58. metadata +85 -39
  59. data/Manifest.txt +0 -93
  60. data/spec/sample_jar/Manifest.txt +0 -8
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Engine Yard, Inc.
2
+ # Copyright (c) 2010-2012 Engine Yard, Inc.
3
3
  # Copyright (c) 2007-2009 Sun Microsystems, Inc.
4
4
  # This source code is available under the MIT license.
5
5
  # See the file LICENSE.txt for details.
@@ -11,8 +11,9 @@ module Warbler
11
11
  module Traits
12
12
  # The War trait sets up the layout and generates web.xml for the war project.
13
13
  class War
14
- include RakeHelper
15
14
  include Trait
15
+ include RakeHelper
16
+ include PathmapHelper
16
17
 
17
18
  DEFAULT_GEM_PATH = '/WEB-INF/gems'
18
19
 
@@ -75,6 +76,7 @@ module Warbler
75
76
  def update_archive(jar)
76
77
  add_public_files(jar)
77
78
  add_webxml(jar)
79
+ move_jars_to_webinf_lib(jar)
78
80
  add_executables(jar) if config.features.include?("executable")
79
81
  add_gemjar(jar) if config.features.include?("gemjar")
80
82
  end
@@ -90,9 +92,9 @@ module Warbler
90
92
  def add_webxml(jar)
91
93
  config.webinf_files.each do |wf|
92
94
  if wf =~ /\.erb$/
93
- jar.files[jar.apply_pathmaps(config, wf, :webinf)] = jar.expand_erb(wf, config)
95
+ jar.files[apply_pathmaps(config, wf, :webinf)] = jar.expand_erb(wf, config)
94
96
  else
95
- jar.files[jar.apply_pathmaps(config, wf, :webinf)] = wf
97
+ jar.files[apply_pathmaps(config, wf, :webinf)] = wf
96
98
  end
97
99
  end
98
100
  end
@@ -137,11 +139,34 @@ module Warbler
137
139
  gem_jar.create("tmp/gems.jar")
138
140
  end
139
141
 
142
+ def move_jars_to_webinf_lib(jar)
143
+ jar.files.keys.select {|k| k =~ /^WEB-INF\/.*\.jar$/ }.each do |k|
144
+ next if k =~ /^WEB-INF\/lib\/([^\/]+)\.jar$/ # skip jars already in WEB-INF/lib
145
+ jar.files["WEB-INF/lib/#{k.sub('WEB-INF','')[1..-1].gsub(/[\/\\]/,'-')}"] = jar.files[k]
146
+ jar.files[k] = empty_jar
147
+ end
148
+ end
149
+
150
+ def empty_jar
151
+ @empty_jar ||= begin
152
+ t = Tempfile.new(["empty", "jar"])
153
+ path = t.path
154
+ t.close!
155
+ Zip::ZipFile.open(path, Zip::ZipFile::CREATE) do |zipfile|
156
+ zipfile.mkdir("META-INF")
157
+ zipfile.get_output_stream("META-INF/MANIFEST.MF") {|f| f << ::Warbler::Jar::DEFAULT_MANIFEST }
158
+ end
159
+ at_exit { File.delete(path) }
160
+ path
161
+ end
162
+ end
163
+
140
164
  # Helper class for holding arbitrary config.webxml values for injecting into +web.xml+.
141
165
  class WebxmlOpenStruct < OpenStruct
166
+ object_kernel_methods = (Object.methods + Kernel.methods + Kernel.private_methods)
142
167
  %w(java com org javax gem).each do |name|
143
- undef_method name if Object.methods.include?(name)
144
- undef_method name.to_sym if Object.methods.include?(name.to_sym)
168
+ undef_method name if object_kernel_methods.include?(name)
169
+ undef_method name.to_sym if object_kernel_methods.include?(name.to_sym)
145
170
  end
146
171
 
147
172
  def initialize(key = 'webxml')
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Engine Yard, Inc.
2
+ # Copyright (c) 2010-2012 Engine Yard, Inc.
3
3
  # Copyright (c) 2007-2009 Sun Microsystems, Inc.
4
4
  # This source code is available under the MIT license.
5
5
  # See the file LICENSE.txt for details.
@@ -1,10 +1,10 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Engine Yard, Inc.
2
+ # Copyright (c) 2010-2012 Engine Yard, Inc.
3
3
  # Copyright (c) 2007-2009 Sun Microsystems, Inc.
4
4
  # This source code is available under the MIT license.
5
5
  # See the file LICENSE.txt for details.
6
6
  #++
7
7
 
8
8
  module Warbler
9
- VERSION = "1.3.2"
9
+ VERSION = "1.3.4"
10
10
  end
data/lib/warbler/war.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Engine Yard, Inc.
2
+ # Copyright (c) 2010-2012 Engine Yard, Inc.
3
3
  # Copyright (c) 2007-2009 Sun Microsystems, Inc.
4
4
  # This source code is available under the MIT license.
5
5
  # See the file LICENSE.txt for details.
data/lib/warbler.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Engine Yard, Inc.
2
+ # Copyright (c) 2010-2012 Engine Yard, Inc.
3
3
  # Copyright (c) 2007-2009 Sun Microsystems, Inc.
4
4
  # This source code is available under the MIT license.
5
5
  # See the file LICENSE.txt for details.
@@ -30,5 +30,6 @@ end
30
30
 
31
31
  require 'warbler/version'
32
32
  require 'warbler/rake_helper'
33
+ require 'warbler/pathmap_helper'
33
34
  require 'warbler/task'
34
35
  require 'warbler/application'
data/lib/warbler_jar.jar CHANGED
Binary file
data/spec/drb_helper.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Engine Yard, Inc.
2
+ # Copyright (c) 2010-2012 Engine Yard, Inc.
3
3
  # Copyright (c) 2007-2009 Sun Microsystems, Inc.
4
4
  # This source code is available under the MIT license.
5
5
  # See the file LICENSE.txt for details.
@@ -18,11 +18,16 @@ class Warbler::Jar
18
18
  end
19
19
 
20
20
  class WarblerDrbServer
21
+ def initialize
22
+ @output = StringIO.new
23
+ $stdout = $stderr = @output
24
+ end
25
+
21
26
  def config(extra_config_proc = nil)
22
27
  @config ||= Warbler::Config.new {|c| extra_config_proc.call(c) if extra_config_proc }
23
28
  end
24
29
 
25
- def alive?
30
+ def ready?
26
31
  true
27
32
  end
28
33
 
@@ -30,6 +35,11 @@ class WarblerDrbServer
30
35
  @jar ||= Warbler::Jar.new
31
36
  end
32
37
 
38
+ def run_task(t)
39
+ @task ||= Warbler::Task.new "warble", config
40
+ Rake::Task[t].invoke
41
+ end
42
+
33
43
  def stop
34
44
  DRb.stop_service
35
45
  end
@@ -0,0 +1,5 @@
1
+ ---
2
+ BUNDLE_FROZEN: "1"
3
+ BUNDLE_PATH: vendor/bundle
4
+ BUNDLE_DISABLE_SHARED_GEMS: "1"
5
+ BUNDLE_WITHOUT: ""
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gem 'rake'
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env jruby
2
+ #
3
+ # This file was generated by RubyGems.
4
+ #
5
+ # The application 'rake' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'rubygems'
10
+
11
+ version = ">= 0"
12
+
13
+ if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
14
+ version = $1
15
+ ARGV.shift
16
+ end
17
+
18
+ gem 'rake', version
19
+ load Gem.bin_path('rake', 'rake', version)
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright (c) 2003, 2004, 2005, 2006, 2007 Jim Weirich
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to
8
+ # deal in the Software without restriction, including without limitation the
9
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10
+ # sell copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in
14
+ # all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22
+ # IN THE SOFTWARE.
23
+ #++
24
+
25
+ begin
26
+ require 'rake'
27
+ rescue LoadError
28
+ require 'rubygems'
29
+ require 'rake'
30
+ end
31
+ Rake.application.run
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by RubyGems.
4
+ #
5
+ # The application 'rake' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'rubygems'
10
+
11
+ version = ">= 0"
12
+
13
+ if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
14
+ version = $1
15
+ ARGV.shift
16
+ end
17
+
18
+ gem 'rake', version
19
+ load Gem.bin_path('rake', 'rake', version)
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright (c) 2003, 2004, 2005, 2006, 2007 Jim Weirich
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to
8
+ # deal in the Software without restriction, including without limitation the
9
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10
+ # sell copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in
14
+ # all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22
+ # IN THE SOFTWARE.
23
+ #++
24
+
25
+ begin
26
+ require 'rake'
27
+ rescue LoadError
28
+ require 'rubygems'
29
+ require 'rake'
30
+ end
31
+ Rake.application.run
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by RubyGems.
4
+ #
5
+ # The application 'rake' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'rubygems'
10
+
11
+ version = ">= 0"
12
+
13
+ if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
14
+ version = $1
15
+ ARGV.shift
16
+ end
17
+
18
+ gem 'rake', version
19
+ load Gem.bin_path('rake', 'rake', version)
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright (c) 2003, 2004, 2005, 2006, 2007 Jim Weirich
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to
8
+ # deal in the Software without restriction, including without limitation the
9
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10
+ # sell copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in
14
+ # all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22
+ # IN THE SOFTWARE.
23
+ #++
24
+
25
+ begin
26
+ require 'rake'
27
+ rescue LoadError
28
+ require 'rubygems'
29
+ require 'rake'
30
+ end
31
+ Rake.application.run
@@ -0,0 +1,23 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+
5
+ spec = Gem::Specification.new do |s|
6
+ s.name = "sample_jar"
7
+ s.version = "1.0"
8
+ s.authors = ["Nick Sieger"]
9
+ s.email = ["nick@nicksieger.com"]
10
+ s.executables = ["sample_jar"]
11
+ s.files = ["History.txt", "Rakefile", "README.txt", "sample_jar.gemspec", "bin/sample_jar", "lib/sample_jar.rb", "test/test_sample_jar.rb"]
12
+ s.homepage = ""
13
+ s.summary = ""
14
+ s.description = ""
15
+ s.add_runtime_dependency("rubyzip", [">= 0"])
16
+ end
17
+
18
+ task :gemspec do
19
+ File.open('sample_jar.gemspec', 'w') do |f|
20
+ f << spec.to_ruby
21
+ end
22
+ end
23
+ # vim: syntax=ruby
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'sample_jar'
4
+
5
+ SampleJar.hello
@@ -1,40 +1,30 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  Gem::Specification.new do |s|
4
- s.name = %q{sample_jar}
5
- s.version = "1.0.0"
4
+ s.name = "sample_jar"
5
+ s.version = "1.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Nick Sieger"]
9
- s.date = %q{2010-11-03}
10
- s.description = %q{Sample jar application for Warbler specs.}
9
+ s.date = "2012-03-09"
10
+ s.description = ""
11
11
  s.email = ["nick@nicksieger.com"]
12
12
  s.executables = ["sample_jar"]
13
- s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
14
- s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/sample_jar", "lib/sample_jar.rb", "test/test_sample_jar.rb"]
15
- s.rdoc_options = ["--main", "README.txt"]
13
+ s.files = ["History.txt", "Rakefile", "README.txt", "sample_jar.gemspec", "bin/sample_jar", "lib/sample_jar.rb", "test/test_sample_jar.rb"]
14
+ s.homepage = ""
16
15
  s.require_paths = ["lib"]
17
- s.rubyforge_project = %q{sample_jar}
18
- s.rubygems_version = %q{1.3.7}
19
- s.summary = %q{Sample jar application for Warbler specs.}
20
- s.test_files = ["test/test_sample_jar.rb"]
16
+ s.rubygems_version = "1.8.15"
17
+ s.summary = ""
21
18
 
22
19
  if s.respond_to? :specification_version then
23
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
20
  s.specification_version = 3
25
21
 
26
22
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
23
  s.add_runtime_dependency(%q<rubyzip>, [">= 0"])
28
- s.add_development_dependency(%q<rubyforge>, [">= 2.0.4"])
29
- s.add_development_dependency(%q<hoe>, [">= 2.6.2"])
30
24
  else
31
25
  s.add_dependency(%q<rubyzip>, [">= 0"])
32
- s.add_dependency(%q<rubyforge>, [">= 2.0.4"])
33
- s.add_dependency(%q<hoe>, [">= 2.6.2"])
34
26
  end
35
27
  else
36
28
  s.add_dependency(%q<rubyzip>, [">= 0"])
37
- s.add_dependency(%q<rubyforge>, [">= 2.0.4"])
38
- s.add_dependency(%q<hoe>, [">= 2.6.2"])
39
29
  end
40
30
  end
@@ -0,0 +1,256 @@
1
+ == Welcome to Rails
2
+
3
+ Rails is a web-application framework that includes everything needed to create
4
+ database-backed web applications according to the Model-View-Control pattern.
5
+
6
+ This pattern splits the view (also called the presentation) into "dumb" templates
7
+ that are primarily responsible for inserting pre-built data in between HTML tags.
8
+ The model contains the "smart" domain objects (such as Account, Product, Person,
9
+ Post) that holds all the business logic and knows how to persist themselves to
10
+ a database. The controller handles the incoming requests (such as Save New Account,
11
+ Update Product, Show Post) by manipulating the model and directing data to the view.
12
+
13
+ In Rails, the model is handled by what's called an object-relational mapping
14
+ layer entitled Active Record. This layer allows you to present the data from
15
+ database rows as objects and embellish these data objects with business logic
16
+ methods. You can read more about Active Record in
17
+ link:files/vendor/rails/activerecord/README.html.
18
+
19
+ The controller and view are handled by the Action Pack, which handles both
20
+ layers by its two parts: Action View and Action Controller. These two layers
21
+ are bundled in a single package due to their heavy interdependence. This is
22
+ unlike the relationship between the Active Record and Action Pack that is much
23
+ more separate. Each of these packages can be used independently outside of
24
+ Rails. You can read more about Action Pack in
25
+ link:files/vendor/rails/actionpack/README.html.
26
+
27
+
28
+ == Getting Started
29
+
30
+ 1. At the command prompt, start a new Rails application using the <tt>rails</tt> command
31
+ and your application name. Ex: rails myapp
32
+ 2. Change directory into myapp and start the web server: <tt>script/server</tt> (run with --help for options)
33
+ 3. Go to http://localhost:3000/ and get "Welcome aboard: You're riding the Rails!"
34
+ 4. Follow the guidelines to start developing your application
35
+
36
+
37
+ == Web Servers
38
+
39
+ By default, Rails will try to use Mongrel and lighttpd if they are installed, otherwise
40
+ Rails will use WEBrick, the webserver that ships with Ruby. When you run script/server,
41
+ Rails will check if Mongrel exists, then lighttpd and finally fall back to WEBrick. This ensures
42
+ that you can always get up and running quickly.
43
+
44
+ Mongrel is a Ruby-based webserver with a C component (which requires compilation) that is
45
+ suitable for development and deployment of Rails applications. If you have Ruby Gems installed,
46
+ getting up and running with mongrel is as easy as: <tt>gem install mongrel</tt>.
47
+ More info at: http://mongrel.rubyforge.org
48
+
49
+ If Mongrel is not installed, Rails will look for lighttpd. It's considerably faster than
50
+ Mongrel and WEBrick and also suited for production use, but requires additional
51
+ installation and currently only works well on OS X/Unix (Windows users are encouraged
52
+ to start with Mongrel). We recommend version 1.4.11 and higher. You can download it from
53
+ http://www.lighttpd.net.
54
+
55
+ And finally, if neither Mongrel or lighttpd are installed, Rails will use the built-in Ruby
56
+ web server, WEBrick. WEBrick is a small Ruby web server suitable for development, but not
57
+ for production.
58
+
59
+ But of course its also possible to run Rails on any platform that supports FCGI.
60
+ Apache, LiteSpeed, IIS are just a few. For more information on FCGI,
61
+ please visit: http://wiki.rubyonrails.com/rails/pages/FastCGI
62
+
63
+
64
+ == Apache .htaccess example
65
+
66
+ # General Apache options
67
+ AddHandler fastcgi-script .fcgi
68
+ AddHandler cgi-script .cgi
69
+ Options +FollowSymLinks +ExecCGI
70
+
71
+ # If you don't want Rails to look in certain directories,
72
+ # use the following rewrite rules so that Apache won't rewrite certain requests
73
+ #
74
+ # Example:
75
+ # RewriteCond %{REQUEST_URI} ^/notrails.*
76
+ # RewriteRule .* - [L]
77
+
78
+ # Redirect all requests not available on the filesystem to Rails
79
+ # By default the cgi dispatcher is used which is very slow
80
+ #
81
+ # For better performance replace the dispatcher with the fastcgi one
82
+ #
83
+ # Example:
84
+ # RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
85
+ RewriteEngine On
86
+
87
+ # If your Rails application is accessed via an Alias directive,
88
+ # then you MUST also set the RewriteBase in this htaccess file.
89
+ #
90
+ # Example:
91
+ # Alias /myrailsapp /path/to/myrailsapp/public
92
+ # RewriteBase /myrailsapp
93
+
94
+ RewriteRule ^$ index.html [QSA]
95
+ RewriteRule ^([^.]+)$ $1.html [QSA]
96
+ RewriteCond %{REQUEST_FILENAME} !-f
97
+ RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
98
+
99
+ # In case Rails experiences terminal errors
100
+ # Instead of displaying this message you can supply a file here which will be rendered instead
101
+ #
102
+ # Example:
103
+ # ErrorDocument 500 /500.html
104
+
105
+ ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
106
+
107
+
108
+ == Debugging Rails
109
+
110
+ Sometimes your application goes wrong. Fortunately there are a lot of tools that
111
+ will help you debug it and get it back on the rails.
112
+
113
+ First area to check is the application log files. Have "tail -f" commands running
114
+ on the server.log and development.log. Rails will automatically display debugging
115
+ and runtime information to these files. Debugging info will also be shown in the
116
+ browser on requests from 127.0.0.1.
117
+
118
+ You can also log your own messages directly into the log file from your code using
119
+ the Ruby logger class from inside your controllers. Example:
120
+
121
+ class WeblogController < ActionController::Base
122
+ def destroy
123
+ @weblog = Weblog.find(params[:id])
124
+ @weblog.destroy
125
+ logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!")
126
+ end
127
+ end
128
+
129
+ The result will be a message in your log file along the lines of:
130
+
131
+ Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1
132
+
133
+ More information on how to use the logger is at http://www.ruby-doc.org/core/
134
+
135
+ Also, Ruby documentation can be found at http://www.ruby-lang.org/ including:
136
+
137
+ * The Learning Ruby (Pickaxe) Book: http://www.ruby-doc.org/docs/ProgrammingRuby/
138
+ * Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide)
139
+
140
+ These two online (and free) books will bring you up to speed on the Ruby language
141
+ and also on programming in general.
142
+
143
+
144
+ == Debugger
145
+
146
+ Debugger support is available through the debugger command when you start your Mongrel or
147
+ Webrick server with --debugger. This means that you can break out of execution at any point
148
+ in the code, investigate and change the model, AND then resume execution!
149
+ You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug'
150
+ Example:
151
+
152
+ class WeblogController < ActionController::Base
153
+ def index
154
+ @posts = Post.find(:all)
155
+ debugger
156
+ end
157
+ end
158
+
159
+ So the controller will accept the action, run the first line, then present you
160
+ with a IRB prompt in the server window. Here you can do things like:
161
+
162
+ >> @posts.inspect
163
+ => "[#<Post:0x14a6be8 @attributes={\"title\"=>nil, \"body\"=>nil, \"id\"=>\"1\"}>,
164
+ #<Post:0x14a6620 @attributes={\"title\"=>\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]"
165
+ >> @posts.first.title = "hello from a debugger"
166
+ => "hello from a debugger"
167
+
168
+ ...and even better is that you can examine how your runtime objects actually work:
169
+
170
+ >> f = @posts.first
171
+ => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
172
+ >> f.
173
+ Display all 152 possibilities? (y or n)
174
+
175
+ Finally, when you're ready to resume execution, you enter "cont"
176
+
177
+
178
+ == Console
179
+
180
+ You can interact with the domain model by starting the console through <tt>script/console</tt>.
181
+ Here you'll have all parts of the application configured, just like it is when the
182
+ application is running. You can inspect domain models, change values, and save to the
183
+ database. Starting the script without arguments will launch it in the development environment.
184
+ Passing an argument will specify a different environment, like <tt>script/console production</tt>.
185
+
186
+ To reload your controllers and models after launching the console run <tt>reload!</tt>
187
+
188
+ == dbconsole
189
+
190
+ You can go to the command line of your database directly through <tt>script/dbconsole</tt>.
191
+ You would be connected to the database with the credentials defined in database.yml.
192
+ Starting the script without arguments will connect you to the development database. Passing an
193
+ argument will connect you to a different database, like <tt>script/dbconsole production</tt>.
194
+ Currently works for mysql, postgresql and sqlite.
195
+
196
+ == Description of Contents
197
+
198
+ app
199
+ Holds all the code that's specific to this particular application.
200
+
201
+ app/controllers
202
+ Holds controllers that should be named like weblogs_controller.rb for
203
+ automated URL mapping. All controllers should descend from ApplicationController
204
+ which itself descends from ActionController::Base.
205
+
206
+ app/models
207
+ Holds models that should be named like post.rb.
208
+ Most models will descend from ActiveRecord::Base.
209
+
210
+ app/views
211
+ Holds the template files for the view that should be named like
212
+ weblogs/index.html.erb for the WeblogsController#index action. All views use eRuby
213
+ syntax.
214
+
215
+ app/views/layouts
216
+ Holds the template files for layouts to be used with views. This models the common
217
+ header/footer method of wrapping views. In your views, define a layout using the
218
+ <tt>layout :default</tt> and create a file named default.html.erb. Inside default.html.erb,
219
+ call <% yield %> to render the view using this layout.
220
+
221
+ app/helpers
222
+ Holds view helpers that should be named like weblogs_helper.rb. These are generated
223
+ for you automatically when using script/generate for controllers. Helpers can be used to
224
+ wrap functionality for your views into methods.
225
+
226
+ config
227
+ Configuration files for the Rails environment, the routing map, the database, and other dependencies.
228
+
229
+ db
230
+ Contains the database schema in schema.rb. db/migrate contains all
231
+ the sequence of Migrations for your schema.
232
+
233
+ doc
234
+ This directory is where your application documentation will be stored when generated
235
+ using <tt>rake doc:app</tt>
236
+
237
+ lib
238
+ Application specific libraries. Basically, any kind of custom code that doesn't
239
+ belong under controllers, models, or helpers. This directory is in the load path.
240
+
241
+ public
242
+ The directory available for the web server. Contains subdirectories for images, stylesheets,
243
+ and javascripts. Also contains the dispatchers and the default HTML files. This should be
244
+ set as the DOCUMENT_ROOT of your web server.
245
+
246
+ script
247
+ Helper scripts for automation and generation.
248
+
249
+ test
250
+ Unit and functional tests along with fixtures. When using the script/generate scripts, template
251
+ test files will be generated for you and placed in this directory.
252
+
253
+ vendor
254
+ External libraries that the application depends on. Also includes the plugins subdirectory.
255
+ If the app has frozen rails, those gems also go here, under vendor/rails/.
256
+ This directory is in the load path.
@@ -0,0 +1,11 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ # This is just a stub Rakefile, really, so don't actually boot Rails
5
+ #require(File.join(File.dirname(__FILE__), 'config', 'boot'))
6
+
7
+ require 'rake'
8
+ require 'rake/testtask'
9
+ require 'rake/rdoctask'
10
+
11
+ #require 'tasks/rails'