ulbrich-jruby-enginize 0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,114 @@
1
+ = JRuby-Enginize
2
+
3
+ == About
4
+
5
+ JRuby-Enginize is a generator for Google AppEngine compliant JRuby
6
+ applications. The generator will support several frameworks but only has
7
+ Sinatra on board for the moment being. If you want to learn more about Google
8
+ AppEngine, go to http://code.google.com/appengine and have a look at the
9
+ tutorials.
10
+
11
+ == Prerequisites
12
+
13
+ JRuby-Enginize needs a proper JRuby installation including rake and the
14
+ Google AppEngine SDK for Java. More dependencies depend on the framework
15
+ template to generate an application for: For Sinatra
16
+ (http://www.sinatrarb.com), you will need the "sinatra" gem. Be sure to
17
+ install such gems with <tt>jgem</tt> or <tt>jruby -S gem</tt> as you need
18
+ them for JRuby and not for Ruby.
19
+
20
+ You also need an Google AppEngine account to actually publish your code.
21
+ Without account you can still play around with the tool and run applications
22
+ locally.
23
+
24
+ == Installation
25
+
26
+ Install JRuby-Enginize as a gem with
27
+
28
+ jgem sources -a http://gems.github.com # Only needed once!
29
+ sudo jgem install ulbrich-jruby-enginize
30
+
31
+ and be sure to really install with <tt>jgem</tt> as JRuby-Enginize will
32
+ refuse to work in normal Ruby environment. It is for creating application
33
+ running on Google AppEngine and it makes no sense outside JRuby!
34
+
35
+ == Using jruby-enginize
36
+
37
+ The gem includes is a single executable named <tt>jruby-enginize</tt> which is
38
+ inspired by the <tt>rails</tt> tool for generating Rails applications. So just
39
+ call
40
+
41
+ jruby -S jruby-enginize
42
+
43
+ and have a look at the options.
44
+
45
+ Here are the steps for creating and deploying a new Sinatra application:
46
+
47
+ * Register with Google AppEngine and look for a name for your application
48
+ which is not already taken. If you don't care about this, you will get in
49
+ trouble upon deploying your application and have to manually reconfigure
50
+ all files!
51
+
52
+ * Generate your application. Sample:
53
+
54
+ <tt>jruby -S jruby-enginize --email foo@bar.com foobar</tt>
55
+
56
+ * Go to the new directory, learn about the available rake tasks and try out
57
+ your application:
58
+
59
+ <tt>cd foobar</tt>
60
+ <tt>jruby rake --tasks</tt>
61
+
62
+ <tt>jruby -S rake sinatra:run</tt>
63
+
64
+ * Deploy the application with the application name and e-mail address you
65
+ generated with:
66
+
67
+ <tt>jruby -S rake appengine:deploy</tt>
68
+
69
+ You can repeat the deployment whenever you want. Be sure to set the version
70
+ number in "appengine-web.xml" to a new value, when you are experimenting with
71
+ an unstable version and don't want to risk your users getting exceptions.
72
+
73
+ You can try the new version by opening e.g.
74
+
75
+ http://3.latest.foobar.appspot.com
76
+
77
+ and replacing "3" with the version number you want to run.
78
+
79
+ Switch the application to the new version as default (stable version) by
80
+ opening
81
+
82
+ http://appengine.google.com/deployment?&app_id=foobar
83
+
84
+ and setting a new default available at
85
+
86
+ http://foobar.appspot.com
87
+
88
+ A small README with these and a few more application specific hints is
89
+ generated along with the source code. Have fun.
90
+
91
+ == Copyright & License
92
+
93
+ Copyright (c) 2009 Holtzbrinck Digital GmbH, Jan Ulbrich
94
+
95
+ Permission is hereby granted, free of charge, to any person
96
+ obtaining a copy of this software and associated documentation
97
+ files (the "Software"), to deal in the Software without
98
+ restriction, including without limitation the rights to use,
99
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
100
+ copies of the Software, and to permit persons to whom the
101
+ Software is furnished to do so, subject to the following
102
+ conditions:
103
+
104
+ The above copyright notice and this permission notice shall be
105
+ included in all copies or substantial portions of the Software.
106
+
107
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
108
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
109
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
110
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
111
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
112
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
113
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
114
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,6 @@
1
+ #!//usr/bin/env jruby -S
2
+ # JRuby-Enginize, a generator for Google AppEngine compliant JRuby apps.
3
+
4
+ require 'lib/script'
5
+
6
+ JRubyEnginize::Script.enginize
data/lib/generator.rb ADDED
@@ -0,0 +1,165 @@
1
+ # JRuby-Enginize, a generator for Google AppEngine compliant JRuby apps.
2
+ #
3
+ # This file contains the JRubyEnginize::Generator class creating a new
4
+ # directory tree of files drawn from a set of shared and specific templates.
5
+
6
+ require 'ftools'
7
+ require 'find'
8
+
9
+ module JRubyEnginize # :nodoc:
10
+
11
+ # Code for generating a directory tree created from a shared and a template
12
+ # specific set of template files.
13
+
14
+ class Generator
15
+ attr_reader :email, :template, :name, :path, :dryrun
16
+
17
+ # Constructor of the generator needing at least email, path and template
18
+ # to run.
19
+ #
20
+ # Parameters:
21
+ #
22
+ # [email] Mail address of the Google AppEngine account to publish with
23
+ # [path] Path of the directory to create
24
+ # [template] Name of the set of templates to generate from
25
+ # [options] Additional options
26
+ #
27
+ # Options:
28
+ #
29
+ # [:name] Optional app name defaulting to name of directory
30
+ # [:dryrun] Flag to enable
31
+
32
+ def initialize(email, path, template, options = {})
33
+ @email = email
34
+ @path = path
35
+ @template = template
36
+
37
+ options = options.dup
38
+
39
+ @name = options.delete(:name)
40
+ @name = File.basename(path) if @name.nil? or @name.empty?
41
+
42
+ @dryrun = options.delete(:dryrun)
43
+
44
+ raise ArgumentError, "Unknown option(s) #{options.keys.join(', ')}" unless options.empty?
45
+ end
46
+
47
+ # Runs the generator. Starts with setting up a map of files to create
48
+ # and overriding shared ones with template specific stuff. Runs through
49
+ # the collected files and calls process_file to render new files in the
50
+ # target path.
51
+
52
+ def run
53
+ templatesdir = Generator::templates_directory
54
+
55
+ shareddir = File.join(templatesdir, 'shared')
56
+ templatedir = File.join(templatesdir, template)
57
+
58
+ raise ArgumentError, 'Missing shared templates' unless File.stat(shareddir).directory?
59
+ raise ArgumentError, "Template \"#{template}\" missing" unless File.stat(templatedir).directory?
60
+
61
+
62
+ puts "!!no changes written as this is only a dry run...\n" if dryrun
63
+ puts "Generating files for template \"#{template}\":\n\n"
64
+
65
+ template_files(shareddir, templatedir).each do |key, path|
66
+ target = File.join(self.path, key)
67
+ puts " Creating \"#{target}\" from template\n file \"#{path}\""
68
+
69
+ process_file(path, target) unless dryrun
70
+ end
71
+
72
+ puts "\nYour next steps:\n\n cd #{self.path}\n\n jruby -S rake"
73
+ puts " jruby -S rake --tasks\n\n jruby -S rake appengine:deploy\n\n"
74
+ end
75
+
76
+ # Returns an Array with the available template names.
77
+
78
+ def self.templates
79
+ return Dir[File.join(Generator::templates_directory, '*')].collect { |path|
80
+ (name = File.basename(path)) == 'shared' ? nil : name }.compact
81
+ end
82
+
83
+ protected
84
+
85
+ # Returns a Hash with relative paths of files as keys and the whole
86
+ # paths as values. Runs through all paths in the order as provided and
87
+ # overrides keys with files found in later paths.
88
+ #
89
+ # Sample:
90
+ #
91
+ # + templates
92
+ # + shared
93
+ # | + foo
94
+ # | + lib
95
+ # | + bar # Will be overridden with file found in specific
96
+ # |
97
+ # + specific
98
+ # + lib
99
+ # | + bar
100
+ # |
101
+ # + other
102
+ #
103
+ # => { 'foo' => '/path/templates/shared/foo',
104
+ # 'lib/bar' => '/path/templates/specific/bar',
105
+ # 'other' => '/path/templates/specific/other' }
106
+ #
107
+ # Parameters:
108
+ #
109
+ # [*paths] Paths to directories to gather files from
110
+
111
+ def template_files(*paths)
112
+ files = {}
113
+
114
+ Find.find(*paths) do |path|
115
+ Find.prune if path[-1].chr == '.'
116
+
117
+ next if File.stat(path).directory?
118
+ next if (key = path.gsub(/.*\/templates\/[^\/]+\//, '')) == ''
119
+
120
+ files[key] = path
121
+ end
122
+
123
+ return files
124
+ end
125
+
126
+ # Creates the target file from the source including some substitution
127
+ # of variables. The target path needs not to exist, as directories are
128
+ # added on the fly. If the source is an executable, the target file will
129
+ # be set executable, too.
130
+ #
131
+ # Parameters:
132
+ #
133
+ # [source] Source file
134
+ # [target] Target file
135
+
136
+ def process_file(source, target)
137
+ content = File.read(source).gsub(/\{\{[^}]*\}\}/) do |match|
138
+ case match
139
+ when '{{email}}'
140
+ email
141
+ when '{{name}}'
142
+ name
143
+ else
144
+ match
145
+ end
146
+ end
147
+
148
+ File.makedirs(File.dirname(target))
149
+
150
+ File.open(target, 'wb') do |file|
151
+ stat = File.stat(source)
152
+
153
+ file.write(content)
154
+ file.chmod(stat.mode | 0x111) if stat.executable?
155
+ end
156
+ end
157
+
158
+ # Returns the directory where the template files reside (located
159
+ # relative to the source file of class JRubyEnginize::Generator).
160
+
161
+ def self.templates_directory
162
+ return File.join(File.dirname(File.dirname(__FILE__)), 'templates')
163
+ end
164
+ end
165
+ end
data/lib/script.rb ADDED
@@ -0,0 +1,85 @@
1
+ # JRuby-Enginize, a generator for Google AppEngine compliant JRuby apps.
2
+ #
3
+ # This file contains the JRubyEnginize::Script class refactored to keep the
4
+ # executables lean.
5
+
6
+ require 'optparse'
7
+ require 'rubygems'
8
+
9
+ require 'lib/generator'
10
+
11
+ module JRubyEnginize # :nodoc:
12
+
13
+ # Commandline code refactored to keep the executables lean.
14
+
15
+ module Script
16
+
17
+ # Command line code for the <tt>"jruby-enginize"</tt> executable. Call
18
+ # with <tt>"--help"</tt> to learn more. Checks for running on JRuby and
19
+ # having the Google AppEngine SDK around and forwards work to
20
+ # JRubyEnginize::Generator.
21
+
22
+ def self.enginize
23
+ email = nil
24
+ template = 'sinatra'
25
+ path = nil
26
+
27
+ prog = File.basename($0)
28
+
29
+ # Check for running with JRuby: The whole generator makes no sense if not
30
+ # running with or at least for JRuby...
31
+
32
+ begin
33
+ java.lang.String
34
+ rescue
35
+ $stderr.puts "!!#{prog} makes only sense on JRuby systems. Please try again."
36
+ exit(1)
37
+ end
38
+
39
+ # The AppEngine SDK has to be around, too.
40
+
41
+ begin
42
+ raise ArgumentError if not File.stat(`which appcfg.sh`.chop).executable?
43
+ rescue Exception
44
+ $stderr.puts "!!AppEngine SDK missing. Please retry after installing."
45
+ exit(2)
46
+ end
47
+
48
+ options = { :name => nil, :dryrun => false }
49
+
50
+ OptionParser.new do |opt|
51
+ opt.banner = "Usage: #{prog} [options] --email address dirname"
52
+
53
+ opt.on('-e', '--email address', 'E-Mail address to publish app with') { |email| }
54
+ opt.on('-t', '--template name', "Name of the template (defaults to #{template})") { |template| }
55
+ opt.on('-n', '--name appname', 'Name of the app (defaults to dir basename)') { |name|
56
+ options[:name] = name }
57
+ opt.on('-d', '--dry', 'Test run not really creating files') {
58
+ options[:dryrun] = true }
59
+ opt.on('-T', '--templates', 'List available templates') {
60
+ puts 'Supported templates:'
61
+ JRubyEnginize::Generator.templates.each { |name| puts " #{name}" }
62
+ exit(0) }
63
+
64
+ begin
65
+ opt.parse!(ARGV)
66
+
67
+ raise "missing directory name" if (path = ARGV.first).nil? or path.empty?
68
+ raise "directory already exists" if FileTest.exists? path
69
+
70
+ raise "missing e-mail address" if email.nil? or email.empty?
71
+ rescue SystemExit
72
+ exit(1)
73
+ rescue Exception => exception
74
+ $stderr.puts "!!#{exception}\n\n"
75
+
76
+ opt.parse!(['--help'])
77
+
78
+ exit(3)
79
+ end
80
+ end
81
+
82
+ JRubyEnginize::Generator.new(email, path, template, options).run
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,39 @@
1
+ README
2
+
3
+ This is a generic README generated by jruby-enginize. Please replace with
4
+ something more meaningful... ;-)
5
+
6
+ GOOGLE APPENGINE DEPLOYMENT
7
+
8
+ As a basic requirement, copy and split the JRuby-JAR calling
9
+
10
+ jrake jruby:splitjars
11
+
12
+ once and after each upgrade to a new version of JRuby.
13
+
14
+ Deploy the application with
15
+
16
+ jrake appengine:deploy
17
+
18
+ and open
19
+
20
+ http://{{name}}.appspot.com
21
+
22
+ to have a first test.
23
+
24
+ Be sure to set the version number in "appengine-web.xml" to a new value, when
25
+ you are experimenting with an unstable version and don't want to risk your
26
+ users getting exceptions.
27
+
28
+ You can try the new version by opening e.g.
29
+
30
+ http://3.latest.{{name}}.appspot.com
31
+
32
+ and replacing "3" with the version number you want to run.
33
+
34
+ Switch the application to the new version as default (stable version) by
35
+ opening
36
+
37
+ http://appengine.google.com/deployment?&app_id={{name}}
38
+
39
+ and setting a new default.
@@ -0,0 +1,68 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ Dir[File.join(File.dirname(__FILE__), 'lib', 'tasks', '*.rake')].each do |ext|
6
+ load ext
7
+ end
8
+
9
+ desc 'Display some help and the README'
10
+ task :help do
11
+ puts 'Call "jruby -S rake --tasks" to learn what tasks are available...'
12
+ puts
13
+ puts File.read('README')
14
+ end
15
+
16
+ task :default => [:help]
17
+
18
+ namespace :jruby do
19
+ desc 'Split the way too large JRuby JAR into two smaller files'
20
+ task :splitjars do
21
+ puts 'Split the way too large JRuby JAR into two smaller files.'
22
+ libdir = File.join(File.dirname(__FILE__), 'lib')
23
+ puts `#{libdir}/split-jruby.sh`
24
+ end
25
+
26
+ desc 'Runs the splitjars task if splitted files not already exist'
27
+ task :check4jars do
28
+ file1 = File.join(File.dirname(__FILE__), 'lib', 'jruby-core.jar')
29
+ file2 = File.join(File.dirname(__FILE__), 'lib', 'ruby-stdlib.jar')
30
+
31
+ begin
32
+ File.stat(file1)
33
+ File.stat(file2)
34
+ rescue Errno::ENOENT
35
+ puts 'Need to copy and split JAR files. Generating them on the fly now...'
36
+ Rake::Task['jruby:splitjars'].invoke
37
+ end
38
+ end
39
+ end
40
+
41
+ namespace :appengine do
42
+ desc 'Create the WAR file for deployment'
43
+ task :war do
44
+ puts 'Create the WAR file for deployment.'
45
+ puts `jruby -S warble`
46
+ end
47
+
48
+ desc 'Upload the new application code'
49
+ task :upload do
50
+ puts 'Upload the new application code (this may take a while).'
51
+ puts `appcfg.sh --enable_jar_splitting --email={{email}} update tmp/war`
52
+ end
53
+
54
+ desc 'Roll back a blocked and halfway broken deploy'
55
+ task :rollback do
56
+ puts 'Roll back a blocked and halfway broken deploy.'
57
+ puts `appcfg.sh --enable_jar_splitting rollback tmp/war`
58
+ end
59
+
60
+ desc 'Remove temp stuff'
61
+ task :clean do
62
+ puts 'Remove temp stuff.'
63
+ puts `rm -rf tmp slingyard.war`
64
+ end
65
+
66
+ desc 'Deploy the application (generating WAR plus uploading files)'
67
+ task :deploy => ['jruby:check4jars', :war, :upload]
68
+ end
@@ -0,0 +1,21 @@
1
+ <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
2
+ <application>{{name}}</application>
3
+ <version>1</version>
4
+ <static-files />
5
+ <resource-files />
6
+ <sessions-enabled>false</sessions-enabled>
7
+ <system-properties>
8
+ <property name="jruby.management.enabled" value="false" />
9
+ <property name="os.arch" value="" />
10
+ <property name="jruby.compile.mode" value="JIT"/> <!-- JIT|FORCE|OFF -->
11
+ <property name="jruby.compile.fastest" value="true"/>
12
+ <property name="jruby.compile.frameless" value="true"/>
13
+ <property name="jruby.compile.positionless" value="true"/>
14
+ <property name="jruby.compile.threadless" value="false"/>
15
+ <property name="jruby.compile.fastops" value="false"/>
16
+ <property name="jruby.compile.fastcase" value="false"/>
17
+ <property name="jruby.compile.chainsize" value="500"/>
18
+ <property name="jruby.compile.lazyHandles" value="false"/>
19
+ <property name="jruby.compile.peephole" value="true"/>
20
+ </system-properties>
21
+ </appengine-web-app>
@@ -0,0 +1,67 @@
1
+ #!/bin/sh
2
+ # Utility script for splitting the JRuby JAR into two smaller JAR files. This
3
+ # is a workaround for a limitation of the JAR size in Google AppEngine.
4
+ #
5
+ # The code for this script has been taken from hints and links found at
6
+ # http://jruby-rack.appspot.com.
7
+
8
+ SCRIPTHOME=`dirname $0`
9
+ JRUBY=`which jruby`
10
+
11
+ if [ ! -x "$JRUBY" ]; then
12
+ echo "!!Missing jruby executable. Please check installation." > /dev/stderr
13
+ exit 1
14
+ fi
15
+
16
+ # See where the jruby binary is installed and find the JRuby JAR from there.
17
+
18
+ PREFIX=`dirname \`dirname $JRUBY\``
19
+ JARFILE="$PREFIX/share/java/jruby/lib/jruby-complete.jar"
20
+
21
+ if [ ! -f "$JARFILE" ]; then
22
+ PREFIX=`dirname \`dirname $JRUBY\``
23
+ JARFILE="$PREFIX/lib/jruby-complete.jar"
24
+ fi
25
+
26
+ if [ ! -f "$JARFILE" ]; then
27
+ echo "!!Missing JRuby JAR. Please check installation." > /dev/stderr
28
+ exit 1
29
+ fi
30
+
31
+ echo "Using $JARFILE for splitting"
32
+ echo "and assembling a AppEngine savvy version of the JRuby JAR in the lib "
33
+ echo "directory."
34
+
35
+ cd $SCRIPTHOME
36
+
37
+ rm -rf jruby-core.jar
38
+ rm -rf ruby-stdlib.jar
39
+ rm -rf tmp_unpack
40
+
41
+ mkdir -p tmp_unpack
42
+ cd tmp_unpack
43
+
44
+ jar xf $JARFILE
45
+
46
+ cd ..
47
+
48
+ mkdir -p jruby-core
49
+
50
+ mv tmp_unpack/org jruby-core
51
+ mv tmp_unpack/com jruby-core
52
+ mv tmp_unpack/jline jruby-core
53
+ mv tmp_unpack/jay jruby-core
54
+ mv tmp_unpack/jruby jruby-core
55
+
56
+ cd jruby-core
57
+
58
+ jar cf ../jruby-core.jar .
59
+
60
+ cd ../tmp_unpack
61
+
62
+ jar cf ../ruby-stdlib.jar .
63
+
64
+ cd ..
65
+
66
+ rm -rf jruby-core
67
+ rm -rf tmp_unpack
@@ -0,0 +1,26 @@
1
+ # This application files as generated by jruby-enginize.
2
+
3
+ require 'rubygems'
4
+
5
+ begin
6
+ require 'haml'
7
+ require 'sass'
8
+ require 'sinatra'
9
+ rescue LoadError => exception
10
+ $stderr.puts '!!missing sinatra. Install sinatra gem and try again.'
11
+ exit(1)
12
+ end
13
+
14
+ # GET /
15
+
16
+ get '/' do
17
+ haml :index
18
+ end
19
+
20
+ # GET /stylesheet.css
21
+
22
+ get '/stylesheet.css' do
23
+ content_type 'text/css', :charset => 'utf-8'
24
+
25
+ sass :stylesheet
26
+ end
@@ -0,0 +1,95 @@
1
+ # Disable automatic framework detection by uncommenting/setting to false
2
+ # Warbler.framework_detection = false
3
+
4
+ # Warbler web application assembly configuration file
5
+ Warbler::Config.new do |config|
6
+ # Temporary directory where the application is staged
7
+ # config.staging_dir = "tmp/war"
8
+
9
+ # Application directories to be included in the webapp.
10
+ config.dirs = %w(lib public views)
11
+
12
+ # Additional files/directories to include, above those in config.dirs
13
+ # config.includes = FileList["db"]
14
+ config.includes = FileList["appengine-web.xml", "app.rb", "config.ru"]
15
+ # Additional files/directories to exclude
16
+ # config.excludes = FileList["lib/tasks/*"]
17
+
18
+ # Additional Java .jar files to include. Note that if .jar files are placed
19
+ # in lib (and not otherwise excluded) then they need not be mentioned here.
20
+ # JRuby and JRuby-Rack are pre-loaded in this list. Be sure to include your
21
+ # own versions if you directly set the value
22
+ # config.java_libs += FileList["lib/java/*.jar"]
23
+
24
+ # Loose Java classes and miscellaneous files to be placed in WEB-INF/classes.
25
+ # config.java_classes = FileList["target/classes/**.*"]
26
+
27
+ # One or more pathmaps defining how the java classes should be copied into
28
+ # WEB-INF/classes. The example pathmap below accompanies the java_classes
29
+ # configuration above. See http://rake.rubyforge.org/classes/String.html#M000017
30
+ # for details of how to specify a pathmap.
31
+ # config.pathmaps.java_classes << "%{target/classes/,}p"
32
+
33
+ # Gems to be included. You need to tell Warbler which gems your application needs
34
+ # so that they can be packaged in the war file.
35
+ # The Rails gems are included by default unless the vendor/rails directory is present.
36
+ # config.gems += ["activerecord-jdbcmysql-adapter", "jruby-openssl"]
37
+ # config.gems << "tzinfo"
38
+ config.gems = ['sinatra', 'haml']
39
+
40
+ # Uncomment this if you don't want to package rails gem.
41
+ # config.gems -= ["rails"]
42
+
43
+ # The most recent versions of gems are used.
44
+ # You can specify versions of gems by using a hash assignment:
45
+ # config.gems["rails"] = "2.0.2"
46
+
47
+ # You can also use regexps or Gem::Dependency objects for flexibility or
48
+ # fine-grained control.
49
+ # config.gems << /^merb-/
50
+ # config.gems << Gem::Dependency.new("merb-core", "= 0.9.3")
51
+
52
+ # Include gem dependencies not mentioned specifically
53
+ config.gem_dependencies = true
54
+
55
+ # Files to be included in the root of the webapp. Note that files in public
56
+ # will have the leading 'public/' part of the path stripped during staging.
57
+ # config.public_html = FileList["public/**/*", "doc/**/*"]
58
+
59
+ # Pathmaps for controlling how public HTML files are copied into the .war
60
+ # config.pathmaps.public_html = ["%{public/,}p"]
61
+
62
+ # Name of the war file (without the .war) -- defaults to the basename
63
+ # of RAILS_ROOT
64
+ config.war_name = "{{name}}"
65
+
66
+ # Name of the MANIFEST.MF template for the war file. Defaults to the
67
+ # MANIFEST.MF normally generated by `jar cf`.
68
+ # config.manifest_file = "config/MANIFEST.MF"
69
+
70
+ # Value of RAILS_ENV for the webapp -- default as shown below
71
+ # config.webxml.rails.env = ENV['RAILS_ENV'] || 'production'
72
+
73
+ # Application booter to use, one of :rack, :rails, or :merb. (Default :rails)
74
+ # config.webxml.booter = :rack
75
+ config.webxml.booter = :rack
76
+
77
+ # When using the :rack booter, "Rackup" script to use.
78
+ # The script is evaluated in a Rack::Builder to load the application.
79
+ # Examples:
80
+ # config.webxml.rackup = %{require './lib/demo'; run Rack::Adapter::Camping.new(Demo)}
81
+ # config.webxml.rackup = require 'cgi' && CGI::escapeHTML(File.read("config.ru"))
82
+
83
+ # Control the pool of Rails runtimes. Leaving unspecified means
84
+ # the pool will grow as needed to service requests. It is recommended
85
+ # that you fix these values when running a production server!
86
+ # config.webxml.jruby.min.runtimes = 2
87
+ # config.webxml.jruby.max.runtimes = 4
88
+ config.webxml.jruby.min.runtimes = 1
89
+ config.webxml.jruby.max.runtimes = 1
90
+ config.webxml.jruby.init.serial = true
91
+
92
+ # JNDI data source name
93
+ # config.webxml.jndi = 'jdbc/rails'
94
+ config.java_libs = []
95
+ end
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'sinatra'
3
+
4
+ root_dir = File.dirname(__FILE__)
5
+
6
+ set :environment, :production
7
+ set :root, root_dir
8
+ set :app_file, File.join(root_dir, 'app.rb')
9
+ disable :run
10
+
11
+ require 'app'
12
+
13
+ run Sinatra::Application
@@ -0,0 +1,7 @@
1
+ namespace :sinatra do
2
+ desc 'Start a local test server on part 4567'
3
+ task :run do
4
+ puts 'Start a local test server on part 4567'
5
+ puts `jruby -S app.rb`
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ %center
2
+ %div{ :id => 'main' }
3
+ %center
4
+ %p
5
+ %img{ :src => '/images/appengine_logo.png' }
6
+ %h1
7
+ Hi folks! Nice to meet you here!
8
+ %p
9
+ This is
10
+ %a{ :href => 'http://code.google.com/appengine' } Google AppEngine
11
+ running the
12
+ %a{ :href => 'http://www.sinatrarb.com' } Sinatra
13
+ framework.
14
+ %p
15
+ %img{ :src => '/images/sinatra_logo.png' }
16
+ %div{ :id => 'footer' }
17
+ This small application was generated by JRuby-Enginize.
@@ -0,0 +1,6 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %link{ :rel => 'stylesheet', :href => '/stylesheet.css', :type => 'text/css' }
5
+ %body
6
+ = yield
@@ -0,0 +1,44 @@
1
+ body
2
+ :background #bbbbbb
3
+ :color #000000
4
+ :font-family helvetica
5
+ :font-size 12pt
6
+
7
+ h1, h2, h3, h4, h5, h6
8
+ :font-family helvetica
9
+
10
+ h1
11
+ :font-size 18pt
12
+
13
+ h2
14
+ :font-size 16pt
15
+
16
+ h3
17
+ :font-size 14pt
18
+
19
+ h4, h5, h6
20
+ :font-size 12pt
21
+
22
+ a
23
+ :color #000000
24
+ :text-decoration none
25
+ :border-bottom 1px dotted
26
+
27
+ a:hover
28
+ :border-bottom 1px solid
29
+
30
+ div
31
+ :width 580px
32
+ :padding 3px 5px
33
+ :text-align left
34
+
35
+ #main
36
+ :background #ffffff
37
+ :margin-top 50px
38
+ :height auto
39
+ :border 1px solid #808080
40
+
41
+ #footer
42
+ :padding-left 0px
43
+ :font-size 9pt
44
+ :color #404040
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ulbrich-jruby-enginize
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - Jan Ulbrich
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-16 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: jan.ulbrich @nospam@ holtzbrinck.com
18
+ executables:
19
+ - jruby-enginize
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ files:
25
+ - bin/jruby-enginize
26
+ - lib/generator.rb
27
+ - lib/script.rb
28
+ - templates/sinatra/views/stylesheet.sass
29
+ - templates/sinatra/views/layout.haml
30
+ - templates/sinatra/views/index.haml
31
+ - templates/sinatra/public/images/sinatra_logo.png
32
+ - templates/sinatra/lib/tasks/sinatra.rake
33
+ - templates/sinatra/config.ru
34
+ - templates/sinatra/config/warble.rb
35
+ - templates/sinatra/app.rb
36
+ - templates/shared/README
37
+ - templates/shared/Rakefile
38
+ - templates/shared/public/images/appengine_logo.png
39
+ - templates/shared/lib/split-jruby.sh
40
+ - templates/shared/lib/jruby-rack-0.9.4.jar
41
+ - templates/shared/appengine-web.xml
42
+ - README
43
+ has_rdoc: true
44
+ homepage: http://github.com/ulbrich/jruby-enginize
45
+ post_install_message:
46
+ rdoc_options:
47
+ - --exclude
48
+ - pkg
49
+ - --exclude
50
+ - templates
51
+ - --all
52
+ - --title
53
+ - JRuby-Enginize
54
+ - --main
55
+ - README
56
+ require_paths:
57
+ - .
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ version:
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ version:
70
+ requirements: []
71
+
72
+ rubyforge_project:
73
+ rubygems_version: 1.2.0
74
+ signing_key:
75
+ specification_version: 2
76
+ summary: A package for generating Google AppEngine compliant JRuby projects.
77
+ test_files: []
78
+