qwirk 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. data/History.md +7 -0
  2. data/LICENSE.txt +201 -0
  3. data/README.md +180 -0
  4. data/Rakefile +34 -0
  5. data/examples/README +1 -0
  6. data/examples/activemq.xml +84 -0
  7. data/examples/advanced_requestor/README.md +15 -0
  8. data/examples/advanced_requestor/base_request_worker.rb +18 -0
  9. data/examples/advanced_requestor/char_count_worker.rb +16 -0
  10. data/examples/advanced_requestor/config.ru +24 -0
  11. data/examples/advanced_requestor/exception_raiser_worker.rb +17 -0
  12. data/examples/advanced_requestor/length_worker.rb +14 -0
  13. data/examples/advanced_requestor/print_worker.rb +14 -0
  14. data/examples/advanced_requestor/publisher.rb +49 -0
  15. data/examples/advanced_requestor/qwirk.yml +16 -0
  16. data/examples/advanced_requestor/reverse_worker.rb +14 -0
  17. data/examples/advanced_requestor/triple_worker.rb +14 -0
  18. data/examples/batch/my_batch_worker.rb +30 -0
  19. data/examples/batch/my_line_worker.rb +8 -0
  20. data/examples/qwirk.yml +20 -0
  21. data/examples/requestor/README.md +13 -0
  22. data/examples/requestor/config.ru +13 -0
  23. data/examples/requestor/qwirk_persist.yml +5 -0
  24. data/examples/requestor/requestor.rb +68 -0
  25. data/examples/requestor/reverse_echo_worker.rb +15 -0
  26. data/examples/setup.rb +13 -0
  27. data/examples/shared/README.md +24 -0
  28. data/examples/shared/config.ru +13 -0
  29. data/examples/shared/publisher.rb +49 -0
  30. data/examples/shared/qwirk_persist.yml +5 -0
  31. data/examples/shared/shared_worker.rb +16 -0
  32. data/examples/simple/README +53 -0
  33. data/examples/simple/bar_worker.rb +10 -0
  34. data/examples/simple/baz_worker.rb +10 -0
  35. data/examples/simple/config.ru +14 -0
  36. data/examples/simple/publisher.rb +49 -0
  37. data/examples/simple/qwirk_persist.yml +4 -0
  38. data/examples/simple/tmp/kahadb/db-1.log +0 -0
  39. data/examples/simple/tmp/kahadb/db.data +0 -0
  40. data/examples/simple/tmp/kahadb/db.redo +0 -0
  41. data/examples/task/README +47 -0
  42. data/examples/task/config.ru +14 -0
  43. data/examples/task/foo_worker.rb +10 -0
  44. data/examples/task/messages.out +1000 -0
  45. data/examples/task/publisher.rb +25 -0
  46. data/examples/task/qwirk_persist.yml +5 -0
  47. data/examples/task/task.rb +36 -0
  48. data/lib/qwirk.rb +63 -0
  49. data/lib/qwirk/adapter.rb +45 -0
  50. data/lib/qwirk/base_worker.rb +96 -0
  51. data/lib/qwirk/batch.rb +4 -0
  52. data/lib/qwirk/batch/acquire_file_strategy.rb +47 -0
  53. data/lib/qwirk/batch/active_record.rb +3 -0
  54. data/lib/qwirk/batch/active_record/batch_job.rb +111 -0
  55. data/lib/qwirk/batch/active_record/failed_record.rb +5 -0
  56. data/lib/qwirk/batch/active_record/outstanding_record.rb +6 -0
  57. data/lib/qwirk/batch/file_status_strategy.rb +86 -0
  58. data/lib/qwirk/batch/file_worker.rb +228 -0
  59. data/lib/qwirk/batch/job_status.rb +29 -0
  60. data/lib/qwirk/batch/parse_file_strategy.rb +48 -0
  61. data/lib/qwirk/engine.rb +9 -0
  62. data/lib/qwirk/loggable.rb +23 -0
  63. data/lib/qwirk/manager.rb +140 -0
  64. data/lib/qwirk/marshal_strategy.rb +74 -0
  65. data/lib/qwirk/marshal_strategy/bson.rb +37 -0
  66. data/lib/qwirk/marshal_strategy/json.rb +37 -0
  67. data/lib/qwirk/marshal_strategy/none.rb +26 -0
  68. data/lib/qwirk/marshal_strategy/ruby.rb +26 -0
  69. data/lib/qwirk/marshal_strategy/string.rb +25 -0
  70. data/lib/qwirk/marshal_strategy/yaml.rb +25 -0
  71. data/lib/qwirk/publish_handle.rb +170 -0
  72. data/lib/qwirk/publisher.rb +67 -0
  73. data/lib/qwirk/queue_adapter.rb +3 -0
  74. data/lib/qwirk/queue_adapter/active_mq.rb +13 -0
  75. data/lib/qwirk/queue_adapter/active_mq/publisher.rb +12 -0
  76. data/lib/qwirk/queue_adapter/active_mq/worker_config.rb +16 -0
  77. data/lib/qwirk/queue_adapter/in_mem.rb +7 -0
  78. data/lib/qwirk/queue_adapter/in_mem/factory.rb +45 -0
  79. data/lib/qwirk/queue_adapter/in_mem/publisher.rb +98 -0
  80. data/lib/qwirk/queue_adapter/in_mem/queue.rb +88 -0
  81. data/lib/qwirk/queue_adapter/in_mem/reply_queue.rb +56 -0
  82. data/lib/qwirk/queue_adapter/in_mem/topic.rb +48 -0
  83. data/lib/qwirk/queue_adapter/in_mem/worker.rb +63 -0
  84. data/lib/qwirk/queue_adapter/in_mem/worker_config.rb +59 -0
  85. data/lib/qwirk/queue_adapter/jms.rb +50 -0
  86. data/lib/qwirk/queue_adapter/jms/connection.rb +42 -0
  87. data/lib/qwirk/queue_adapter/jms/consumer.rb +37 -0
  88. data/lib/qwirk/queue_adapter/jms/publisher.rb +126 -0
  89. data/lib/qwirk/queue_adapter/jms/worker.rb +89 -0
  90. data/lib/qwirk/queue_adapter/jms/worker_config.rb +38 -0
  91. data/lib/qwirk/remote_exception.rb +42 -0
  92. data/lib/qwirk/request_worker.rb +62 -0
  93. data/lib/qwirk/task.rb +177 -0
  94. data/lib/qwirk/task.rb.sav +194 -0
  95. data/lib/qwirk/version.rb +3 -0
  96. data/lib/qwirk/worker.rb +222 -0
  97. data/lib/qwirk/worker_config.rb +187 -0
  98. data/lib/rails/generators/qwirk/qwirk_generator.rb +82 -0
  99. data/lib/rails/generators/qwirk/templates/initializer.rb +6 -0
  100. data/lib/rails/generators/qwirk/templates/migration.rb +9 -0
  101. data/lib/rails/generators/qwirk/templates/schema.rb +28 -0
  102. data/lib/rails/railties/tasks.rake +8 -0
  103. data/lib/tasks/qwirk_tasks.rake +4 -0
  104. data/test/base_test.rb +248 -0
  105. data/test/database.yml +14 -0
  106. data/test/dummy/Rakefile +7 -0
  107. data/test/dummy/app/controllers/application_controller.rb +3 -0
  108. data/test/dummy/app/helpers/application_helper.rb +2 -0
  109. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  110. data/test/dummy/config.ru +4 -0
  111. data/test/dummy/config/application.rb +45 -0
  112. data/test/dummy/config/boot.rb +10 -0
  113. data/test/dummy/config/database.yml +22 -0
  114. data/test/dummy/config/environment.rb +5 -0
  115. data/test/dummy/config/environments/development.rb +26 -0
  116. data/test/dummy/config/environments/production.rb +49 -0
  117. data/test/dummy/config/environments/test.rb +35 -0
  118. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  119. data/test/dummy/config/initializers/inflections.rb +10 -0
  120. data/test/dummy/config/initializers/mime_types.rb +5 -0
  121. data/test/dummy/config/initializers/secret_token.rb +7 -0
  122. data/test/dummy/config/initializers/session_store.rb +8 -0
  123. data/test/dummy/config/locales/en.yml +5 -0
  124. data/test/dummy/config/routes.rb +58 -0
  125. data/test/dummy/log/development.log +0 -0
  126. data/test/dummy/log/production.log +0 -0
  127. data/test/dummy/log/server.log +0 -0
  128. data/test/dummy/log/test.log +0 -0
  129. data/test/dummy/public/404.html +26 -0
  130. data/test/dummy/public/422.html +26 -0
  131. data/test/dummy/public/500.html +26 -0
  132. data/test/dummy/public/favicon.ico +0 -0
  133. data/test/dummy/public/javascripts/application.js +2 -0
  134. data/test/dummy/public/javascripts/controls.js +965 -0
  135. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  136. data/test/dummy/public/javascripts/effects.js +1123 -0
  137. data/test/dummy/public/javascripts/prototype.js +6001 -0
  138. data/test/dummy/public/javascripts/rails.js +191 -0
  139. data/test/dummy/script/rails +6 -0
  140. data/test/integration/navigation_test.rb +7 -0
  141. data/test/jms.yml +9 -0
  142. data/test/jms_fail_test.rb +149 -0
  143. data/test/jms_requestor_block_test.rb +278 -0
  144. data/test/jms_requestor_test.rb +238 -0
  145. data/test/jms_test.rb +287 -0
  146. data/test/marshal_strategy_test.rb +62 -0
  147. data/test/support/integration_case.rb +5 -0
  148. data/test/test_helper.rb +7 -0
  149. data/test/test_helper.rbold +22 -0
  150. data/test/test_helper_active_record.rb +61 -0
  151. data/test/unit/qwirk/batch/acquire_file_strategy_test.rb +101 -0
  152. data/test/unit/qwirk/batch/active_record/batch_job_test.rb +35 -0
  153. data/test/unit/qwirk/batch/parse_file_strategy_test.rb +49 -0
  154. metadata +366 -0
@@ -0,0 +1,6 @@
1
+ module Cheese
2
+ class Engine < Rails::Engine
3
+ config.mount_at = '/qwirk'
4
+ config.widget_factory_name = 'Qwirk'
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ class CreateCheeseTables < ActiveRecord::Migration
2
+ def self.up
3
+ SCHEMA_AUTO_INSERTED_HERE
4
+ end
5
+
6
+ def self.down
7
+ drop_table :cheese_widgets
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ ActiveRecord::Schema.define(:version => 0) do
2
+
3
+ create_table :mt_batch_jobs, :force => true do |t|
4
+ t.string :file, :null => false
5
+ t.string :worker_name, :null => false
6
+ t.integer :total_count
7
+ t.integer :finished_count, :null => false, :default => 0
8
+ t.column :status, 'char(8)', :null => false, :default => Qwirk::Batch::JobStatus::INITED
9
+ t.datetime :created_at, :null => false
10
+ t.datetime :updated_at, :null => false
11
+ end
12
+ add_index :mt_batch_jobs, [:file, :worker_name]
13
+
14
+ create_table :mt_outstanding_records, :force => true do |t|
15
+ t.integer :batch_job_id, :null => false
16
+ t.integer :file_position, :null => false
17
+ end
18
+ add_index :mt_outstanding_records, [:batch_job_id]
19
+
20
+ create_table :mt_failed_records, :force => true do |t|
21
+ t.integer :batch_job_id, :null => false
22
+ t.integer :file_position, :null => false
23
+ t.string :message, :null => false
24
+ end
25
+ add_index :mt_failed_records, [:batch_job_id]
26
+
27
+
28
+ end
@@ -0,0 +1,8 @@
1
+ namespace :qwirk do
2
+
3
+ desc "example gem rake task"
4
+ task :report => :environment do
5
+ puts "you just ran the example gem rake task"
6
+ end
7
+
8
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :qwirk do
3
+ # # Task goes here
4
+ # end
data/test/base_test.rb ADDED
@@ -0,0 +1,248 @@
1
+ require 'qwirk'
2
+ require 'shoulda'
3
+ require 'test/unit'
4
+ require 'fileutils'
5
+
6
+ class DummyWorker
7
+ include Qwirk::BaseWorker
8
+ attr_reader :opts, :setup_called, :count
9
+
10
+ @@mutex = Mutex.new
11
+
12
+ def self.reset
13
+ @@total_count = 0
14
+ @@workers = []
15
+ end
16
+
17
+ self.reset
18
+
19
+ def self.total_count
20
+ @@total_count
21
+ end
22
+
23
+ def self.workers
24
+ @@workers
25
+ end
26
+
27
+ def initialize(opts={})
28
+ @opts = opts
29
+ @count = 0
30
+ @@mutex.synchronize do
31
+ @@workers << self
32
+ end
33
+ end
34
+
35
+ # One time initialization prior to first thread
36
+ def setup
37
+ @setup_called = true
38
+ end
39
+
40
+ def start
41
+ @stopped = false
42
+ while !@stopped do
43
+ sleep 1
44
+ @count += 1
45
+ @@mutex.synchronize do
46
+ @@total_count += 1
47
+ end
48
+ end
49
+ end
50
+
51
+ def stop
52
+ @stopped = true
53
+ end
54
+
55
+ def status
56
+ "index=#{index}"
57
+ end
58
+ end
59
+
60
+ class Dummy2Worker < DummyWorker
61
+
62
+ end
63
+
64
+ class BaseTest < Test::Unit::TestCase
65
+ context 'a worker with no name specified' do
66
+ setup do
67
+ @worker = DummyWorker.new
68
+ @worker.index = 2
69
+ @worker.thread = 'dummy thread'
70
+ @supervisor = DummyWorker.create_supervisor('dummy_manager', {:foo => 1})
71
+ end
72
+
73
+ should "have default name and proper supervisor and attributes" do
74
+ assert_equal('Dummy', @worker.class.default_name)
75
+ assert_equal('Dummy', @supervisor.name)
76
+ assert_equal(2, @worker.index)
77
+ assert_equal('dummy thread', @worker.thread)
78
+ assert_equal(Qwirk::Base::Supervisor, @supervisor.class)
79
+ assert_equal('dummy_manager', @supervisor.manager)
80
+ end
81
+ end
82
+
83
+ context 'a worker with name specified' do
84
+ setup do
85
+ @worker = DummyWorker.new(:name => 'Foo')
86
+ @supervisor = DummyWorker.create_supervisor('dummy_manager', {:name => 'Foo'})
87
+ end
88
+
89
+ should "have name specified and proper supervisor and attributes" do
90
+ assert_equal('Foo', @supervisor.name)
91
+ end
92
+ end
93
+
94
+ context 'a default worker' do
95
+ setup do
96
+ DummyWorker.reset
97
+ @start_time = Time.now
98
+ @manager = Qwirk::Manager.new
99
+ @manager.add(DummyWorker, 2, {:foo => 42})
100
+ sleep 5
101
+ @manager.stop
102
+ @manager.join
103
+ @end_time = Time.now
104
+ end
105
+
106
+ should "be performing work" do
107
+ w = DummyWorker.workers
108
+ w = w.reverse if w[0].index == 1
109
+ assert_equal 2, w.size
110
+ (0..1).each do |i|
111
+ worker = w[i]
112
+ assert worker.count >= 3
113
+ assert worker.count <= 8
114
+ assert worker.index == i
115
+ assert worker.status == "index=#{worker.index}"
116
+ end
117
+ assert DummyWorker.total_count >= 8
118
+ assert DummyWorker.total_count <= 14
119
+ assert (@end_time-@start_time) < 14.0
120
+ assert w[0].setup_called
121
+ assert !w[1].setup_called
122
+ end
123
+ end
124
+
125
+ context 'a disallowed worker' do
126
+ setup do
127
+ DummyWorker.reset
128
+ @manager = Qwirk::Manager.new(:domain => 'DisallowedWorker')
129
+ @manager.allowed_workers = []
130
+ end
131
+
132
+ should "not be allowed" do
133
+ e = assert_raises RuntimeError do
134
+ @manager.add(DummyWorker, 2, {:foo => 42})
135
+ end
136
+ assert_match %r%is not an allowed worker%, e.message
137
+
138
+ e = assert_raises RuntimeError do
139
+ @manager.add('FdajfsdklasdfWorker', 2, {:foo => 42})
140
+ end
141
+ assert_match %r%Invalid class%, e.message
142
+ end
143
+ end
144
+
145
+ context 'multiple workers' do
146
+ setup do
147
+ DummyWorker.reset
148
+ @manager = Qwirk::Manager.new(:domain => 'AllowedWorker')
149
+ @manager.allowed_workers = [DummyWorker, Dummy2Worker]
150
+ @manager.add(DummyWorker, 2, {:foo => 42})
151
+ @manager.add(DummyWorker, 1, {:name => 'OtherDummy'})
152
+ @manager.add(Dummy2Worker, 2, {:name => 'SecondDummy'})
153
+ sleep 5
154
+ @manager.stop
155
+ @manager.join
156
+ @end_time = Time.now
157
+ end
158
+
159
+ should "work" do
160
+ w = DummyWorker.workers
161
+ s = @manager.supervisors
162
+ assert_equal 5, w.size
163
+ assert_equal 3, s.size
164
+ (0..4).each do |i|
165
+ worker = w[i]
166
+ assert worker.count >= 3
167
+ assert worker.count <= 8
168
+ end
169
+ assert DummyWorker.total_count >= 20
170
+ assert DummyWorker.total_count <= 35
171
+ super_names = s.map {|sup| sup.name}.sort
172
+ assert_equal ['Dummy', 'OtherDummy', 'SecondDummy'], super_names
173
+ end
174
+ end
175
+
176
+ context 'manager with persist_file set' do
177
+ setup do
178
+ DummyWorker.reset
179
+ persist_file = "/tmp/qwirk_persist_#{$$}.state"
180
+ @manager = Qwirk::Manager.new(:domain => 'PersistManager', :persist_file => persist_file)
181
+ @manager.allowed_workers = [DummyWorker, Dummy2Worker]
182
+ @manager.add(DummyWorker, 2, {:foo => 42})
183
+ @manager.add(DummyWorker, 1, {:name => 'OtherDummy'})
184
+ @manager.add(Dummy2Worker, 2, {:name => 'SecondDummy'})
185
+ @manager.stop
186
+ @manager.join
187
+ DummyWorker.reset
188
+ @manager2 = Qwirk::Manager.new(:domain => 'PersistManager2', :persist_file => persist_file)
189
+ sleep 5
190
+ @manager2.stop
191
+ @manager2.join
192
+ FileUtils.rm persist_file
193
+ end
194
+
195
+ should "recreate workers and supervisors correctly" do
196
+ w = DummyWorker.workers
197
+ s = @manager.supervisors
198
+ assert_equal 5, w.size
199
+ assert_equal 3, s.size
200
+ (0..4).each do |i|
201
+ worker = w[i]
202
+ assert worker.count >= 3
203
+ assert worker.count <= 8
204
+ end
205
+ assert DummyWorker.total_count >= 20
206
+ assert DummyWorker.total_count <= 35
207
+ super_names = s.map {|sup| sup.name}.sort
208
+ assert_equal ['Dummy', 'OtherDummy', 'SecondDummy'], super_names
209
+ end
210
+ end
211
+
212
+ context 'manager' do
213
+ setup do
214
+ DummyWorker.reset
215
+ persist_file = "/tmp/qwirk_persist_#{$$}.state"
216
+ @domain = 'JMXManagerDomain'
217
+ @manager = Qwirk::Manager.new(:domain => @domain)
218
+ @manager.allowed_workers = [DummyWorker, Dummy2Worker]
219
+
220
+ @server = JMX.simple_server
221
+ @client = JMX.connect
222
+ @manager_mbean = @client[Qwirk.manager_mbean_object_name(@domain)]
223
+ end
224
+
225
+ teardown do
226
+ @manager.stop
227
+ @manager.join
228
+ @server.stop
229
+ end
230
+
231
+ should "allow JMX to start and query workers" do
232
+ @manager_mbean.start_worker('DummyWorker', 2, '{"foo":42}')
233
+ @manager_mbean.start_worker('DummyWorker', 1, '{"name":"OtherDummy"}')
234
+ @manager_mbean.start_worker('Dummy2Worker', 2, '{"name":"SecondDummy"}')
235
+ #puts "allowed workers=#{@manager_mbean.allowed_workers[0].class.name}"
236
+ assert_equal ['DummyWorker', 'Dummy2Worker'], @manager_mbean.allowed_workers.to_a
237
+
238
+ dummy_bean = @client[Qwirk.supervisor_mbean_object_name(@domain, 'Dummy')]
239
+ other_dummy_bean = @client[Qwirk.supervisor_mbean_object_name(@domain, 'OtherDummy')]
240
+ second_dummy_bean = @client[Qwirk.supervisor_mbean_object_name(@domain, 'SecondDummy')]
241
+ assert 2, dummy_bean.count
242
+ assert 1, other_dummy_bean.count
243
+ assert 2, second_dummy_bean.count
244
+ other_dummy_bean.count = 3
245
+ assert 3, other_dummy_bean.count
246
+ end
247
+ end
248
+ end
data/test/database.yml ADDED
@@ -0,0 +1,14 @@
1
+ mysql:
2
+ adapter: mysql
3
+ database: qwirk_test
4
+ username: root
5
+ password:
6
+ host: 127.0.0.1
7
+ pool: 5
8
+ timeout: 5000
9
+
10
+ sqlite3:
11
+ adapter: sqlite3
12
+ database: db/test.sqlite3
13
+ pool: 5
14
+ timeout: 5000
@@ -0,0 +1,7 @@
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
+ require File.expand_path('../config/application', __FILE__)
5
+ require 'rake'
6
+
7
+ Dummy::Application.load_tasks
@@ -0,0 +1,3 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Dummy</title>
5
+ <%= stylesheet_link_tag :all %>
6
+ <%= javascript_include_tag :defaults %>
7
+ <%= csrf_meta_tag %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run Dummy::Application
@@ -0,0 +1,45 @@
1
+ require File.expand_path('../boot', __FILE__)
2
+
3
+ require "active_model/railtie"
4
+ require "active_record/railtie"
5
+ require "action_controller/railtie"
6
+ require "action_view/railtie"
7
+ require "action_mailer/railtie"
8
+
9
+ Bundler.require
10
+ require "qwirk"
11
+
12
+ module Dummy
13
+ class Application < Rails::Application
14
+ # Settings in config/environments/* take precedence over those specified here.
15
+ # Application configuration should go into files in config/initializers
16
+ # -- all .rb files in that directory are automatically loaded.
17
+
18
+ # Custom directories with classes and modules you want to be autoloadable.
19
+ # config.autoload_paths += %W(#{config.root}/extras)
20
+
21
+ # Only load the plugins named here, in the order given (default is alphabetical).
22
+ # :all can be used as a placeholder for all plugins not explicitly named.
23
+ # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
24
+
25
+ # Activate observers that should always be running.
26
+ # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
27
+
28
+ # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
29
+ # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
30
+ # config.time_zone = 'Central Time (US & Canada)'
31
+
32
+ # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
33
+ # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
34
+ # config.i18n.default_locale = :de
35
+
36
+ # JavaScript files you want as :defaults (application.js is always included).
37
+ # config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
38
+
39
+ # Configure the default encoding used in templates for Ruby 1.9.
40
+ config.encoding = "utf-8"
41
+
42
+ # Configure sensitive parameters which will be filtered from the log file.
43
+ config.filter_parameters += [:password]
44
+ end
45
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ gemfile = File.expand_path('../../../../Gemfile', __FILE__)
3
+
4
+ if File.exist?(gemfile)
5
+ ENV['BUNDLE_GEMFILE'] = gemfile
6
+ require 'bundler'
7
+ Bundler.setup
8
+ end
9
+
10
+ $:.unshift File.expand_path('../../../../lib', __FILE__)
@@ -0,0 +1,22 @@
1
+ # SQLite version 3.x
2
+ # gem install sqlite3
3
+ development:
4
+ adapter: sqlite3
5
+ database: db/development.sqlite3
6
+ pool: 5
7
+ timeout: 5000
8
+
9
+ # Warning: The database defined as "test" will be erased and
10
+ # re-generated from your development database when you run "rake".
11
+ # Do not set this db to the same as development or production.
12
+ test:
13
+ adapter: sqlite3
14
+ database: db/test.sqlite3
15
+ pool: 5
16
+ timeout: 5000
17
+
18
+ production:
19
+ adapter: sqlite3
20
+ database: db/production.sqlite3
21
+ pool: 5
22
+ timeout: 5000