rhoconnect 3.3.6 → 3.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +40 -4
- data/Gemfile +2 -2
- data/Gemfile.lock +27 -25
- data/bench/benchapp/Gemfile +7 -27
- data/bench/benchapp/config.ru +9 -31
- data/bench/blobapp/Gemfile +7 -27
- data/bench/blobapp/config.ru +9 -29
- data/bench/lib/bench.rb +8 -1
- data/bench/lib/bench/test_data.rb +4 -1
- data/bench/scripts/blob_cud_script.rb +4 -0
- data/bench/scripts/cud_script.rb +7 -1
- data/bench/scripts/helpers.rb +1 -1
- data/bench/scripts/test_query_script.rb +20 -7
- data/bench/spec/bench_spec_helper.rb +3 -1
- data/bin/rhoconnect +22 -12
- data/commands/{commands/dtach_commands → dtach}/dtach_about.rb +0 -0
- data/commands/{commands/dtach_commands → dtach}/dtach_install.rb +0 -0
- data/commands/{commands/redis_commands → dtach}/redis_attach.rb +0 -0
- data/commands/execute.rb +14 -15
- data/commands/generators/update.rb +26 -0
- data/commands/{commands/redis_commands → redis}/redis_about.rb +0 -0
- data/commands/redis/redis_download.rb +13 -0
- data/commands/redis/redis_install.rb +26 -0
- data/commands/{commands/redis_commands → redis}/redis_make.rb +0 -0
- data/commands/{commands/redis_commands → redis}/redis_restart.rb +3 -2
- data/commands/{commands/redis_commands → redis}/redis_start.rb +0 -0
- data/commands/{commands/redis_commands → redis}/redis_startbg.rb +0 -0
- data/commands/{commands/redis_commands → redis}/redis_stop.rb +3 -2
- data/commands/{commands/rhoconnect → rhoconnect}/clean_start.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/config.rb +7 -2
- data/commands/{commands/rhoconnect → rhoconnect}/create_user.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/delete_device.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/delete_user.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/flushdb.rb +4 -4
- data/commands/{commands/rhoconnect → rhoconnect}/get_token.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/reset.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/reset_refresh.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/restart.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/secret.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/set_admin_password.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/spec.rb +0 -0
- data/commands/rhoconnect/start.rb +27 -0
- data/commands/{commands/rhoconnect → rhoconnect}/startbg.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/startdebug.rb +2 -2
- data/commands/{commands/rhoconnect → rhoconnect}/stop.rb +3 -4
- data/commands/{commands/rhoconnect → rhoconnect}/version.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/web.rb +0 -0
- data/commands/rhoconnect_attach/attach.rb +10 -0
- data/commands/rhoconnect_console/console.rb +16 -0
- data/commands/{commands/rhoconnect → rhoconnect_console}/console_helper.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect_war}/war.rb +0 -0
- data/commands/{commands/redis_commands → utilities}/redis_runner.rb +22 -19
- data/commands/utilities/utilities.rb +6 -0
- data/doc/benchmarks.txt +2 -2
- data/doc/bulk-sync.txt +12 -1
- data/doc/client-java.txt +3 -3
- data/doc/client-objc.txt +1 -1
- data/doc/client.txt +5 -5
- data/doc/command-line.txt +80 -135
- data/doc/deploying.txt +119 -12
- data/doc/extending-rhoconnect-server.txt +1 -1
- data/doc/heroku-addon.txt +119 -23
- data/doc/install.txt +101 -39
- data/doc/java-plugin.txt +2 -2
- data/doc/licensing.txt +1 -1
- data/doc/plugin-intro.txt +3 -1
- data/doc/preparing-production.txt +4 -4
- data/doc/public/cli.txt +2 -2
- data/doc/push-backend-setup.txt +11 -1
- data/doc/push-client-setup.txt +72 -2
- data/doc/push-server-setup.txt +129 -8
- data/doc/rails-plugin.txt +245 -40
- data/doc/rest-api.txt +10 -6
- data/doc/rhoconnect-calculator.txt +237 -0
- data/doc/rhoconnect-redis-stack.txt +35 -0
- data/doc/session-and-configuration.txt +24 -0
- data/doc/settings.txt +51 -41
- data/doc/source-adapters.txt +45 -45
- data/doc/stats-middleware.txt +2 -2
- data/doc/supported-platforms.txt +6 -6
- data/doc/testing.txt +2 -2
- data/doc/tutorial.txt +63 -63
- data/examples/simple/Gemfile +7 -35
- data/examples/simple/config.ru +8 -26
- data/examples/simple/sources/product.rb +6 -6
- data/generators/rhoconnect.rb +5 -0
- data/generators/templates/application/Gemfile +7 -37
- data/generators/templates/application/Rakefile +8 -0
- data/generators/templates/application/config.ru +12 -31
- data/generators/templates/application/rcgemfile +44 -0
- data/generators/templates/application/settings/settings.yml +7 -5
- data/install.sh +4 -4
- data/installer/unix-like/create_texts.rb +7 -2
- data/installer/unix-like/rho_connect_install_constants.rb +2 -2
- data/installer/unix-like/rho_connect_install_installers.rb +1 -16
- data/lib/rhoconnect.rb +51 -38
- data/lib/rhoconnect/api/app/query.rb +4 -1
- data/lib/rhoconnect/api/app/search.rb +4 -1
- data/lib/rhoconnect/api/client/list_client_docs.rb +3 -1
- data/lib/rhoconnect/api/user/ping.rb +1 -5
- data/lib/rhoconnect/application/init.rb +43 -0
- data/lib/rhoconnect/async.rb +11 -6
- data/lib/rhoconnect/client_sync.rb +30 -37
- data/lib/rhoconnect/document.rb +4 -0
- data/lib/rhoconnect/graph_helper.rb +74 -56
- data/lib/rhoconnect/middleware/helpers.rb +4 -0
- data/lib/rhoconnect/ping.rb +1 -0
- data/lib/rhoconnect/ping/gcm.rb +58 -0
- data/lib/rhoconnect/predefined_adapters/bench_adapter.rb +7 -1
- data/lib/rhoconnect/source.rb +70 -56
- data/lib/rhoconnect/source_sync.rb +33 -5
- data/lib/rhoconnect/store.rb +358 -110
- data/lib/rhoconnect/user.rb +8 -0
- data/lib/rhoconnect/utilities.rb +16 -14
- data/lib/rhoconnect/version.rb +1 -1
- data/lib/rhoconnect/web-console/models/client.js +1 -1
- data/lib/rhoconnect/web-console/public/UNVR67bold.ttf +0 -0
- data/lib/rhoconnect/web-console/public/bootstrap.css +6 -0
- data/lib/rhoconnect/web-console/public/logo.png +0 -0
- data/lib/rhoconnect/web-console/server.rb +13 -11
- data/lib/rhoconnect/web-console/templates/index.erb +5 -5
- data/lib/rhoconnect/web-console/templates/jqplot.erb +1 -0
- data/lib/rhoconnect/web-console/views/doc.js +0 -4
- data/lib/rhoconnect/web-console/views/home.js +2 -1
- data/lib/rhoconnect/web-console/views/new_ping.js +11 -6
- data/lib/rhoconnect/web-console/views/stats.js +9 -5
- data/rhoconnect.gemspec +6 -4
- data/spec/api/app/fast_update_spec.rb +2 -2
- data/spec/api/source/get_source_params_spec.rb +1 -0
- data/spec/apps/rhotestapp/settings/settings.yml +5 -5
- data/spec/client_sync_spec.rb +3 -14
- data/spec/perf/perf_spec_helper.rb +11 -7
- data/spec/perf/store_perf_spec.rb +88 -11
- data/spec/ping/gcm_spec.rb +99 -0
- data/spec/server/server_spec.rb +7 -0
- data/spec/server/stats_spec.rb +9 -2
- data/spec/source_sync_spec.rb +29 -0
- data/spec/spec_helper.rb +40 -38
- data/spec/stats/record_spec.rb +18 -9
- data/spec/store_spec.rb +128 -19
- data/spec/testdata/10000-data.txt +0 -0
- data/spec/testdata/5-data.txt +0 -0
- data/spec/testdata/5000-data.txt +0 -0
- data/tasks/jasmine.rake +1 -0
- data/tasks/redis.rake +16 -13
- metadata +71 -39
- data/commands/commands/redis_commands/redis_download.rb +0 -33
- data/commands/commands/redis_commands/redis_install.rb +0 -26
- data/commands/commands/rhoconnect/attach.rb +0 -8
- data/commands/commands/rhoconnect/console.rb +0 -15
- data/commands/commands/rhoconnect/start.rb +0 -18
- data/commands/utilities/dtach_installed.rb +0 -10
data/examples/simple/Gemfile
CHANGED
|
@@ -3,39 +3,11 @@ source 'http://rubygems.org'
|
|
|
3
3
|
# load rhoconnect from relative path
|
|
4
4
|
gem 'rhoconnect', :path => '../../'
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
platforms :ruby_19 do
|
|
14
|
-
gem 'rack-fiber_pool'
|
|
15
|
-
gem 'async-rack'
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
platforms :jruby do
|
|
19
|
-
gem 'jdbc-sqlite3', ">= 3.7.2"
|
|
20
|
-
gem 'dbi', ">= 0.4.5"
|
|
21
|
-
gem 'dbd-jdbc', ">= 0.1.4"
|
|
22
|
-
gem 'jruby-openssl', ">= 0.7.4"
|
|
23
|
-
gem 'trinidad'
|
|
24
|
-
gem 'warbler'
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
#gem 'sqlite3', ">= 1.3.3", :platforms => [:ruby, :mswin, :mingw]
|
|
28
|
-
|
|
29
|
-
group :development do
|
|
30
|
-
# FIXME: At this moment (01/10/2012) only pre release of 'eventmachine' is working on Windows
|
|
31
|
-
gem 'eventmachine', '~> 1.0.0.beta', :platforms => [:mswin, :mingw]
|
|
32
|
-
# By default to run application thin web server is used
|
|
33
|
-
gem 'thin', :platforms => [:ruby, :mswin, :mingw]
|
|
34
|
-
gem 'rhomobile-debug', ">= 1.0.2"
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
group :test do
|
|
38
|
-
gem 'rack-test', '>= 0.5.3', :require => "rack/test"
|
|
39
|
-
gem 'rspec', '~> 2.6.0'
|
|
40
|
-
gem 'rhomobile-debug', ">= 1.0.2"
|
|
6
|
+
gemfile_path = File.join(File.dirname(__FILE__), '..', '..', 'generators','templates', 'application', ".rcgemfile")
|
|
7
|
+
begin
|
|
8
|
+
eval(IO.read(gemfile_path))
|
|
9
|
+
rescue Exception => e
|
|
10
|
+
puts "ERROR: Couldn't find RhoConnect .rcgemfile"
|
|
11
|
+
puts e.message
|
|
12
|
+
exit 1
|
|
41
13
|
end
|
data/examples/simple/config.ru
CHANGED
|
@@ -1,35 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
require '
|
|
3
|
-
require 'bundler'
|
|
4
|
-
Bundler.require
|
|
2
|
+
require 'rhoconnect/application/init'
|
|
5
3
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
if ENV['DEBUG'] == 'yes'
|
|
9
|
-
ENV['APP_TYPE'] = 'rhosync'
|
|
10
|
-
ENV['ROOT_PATH'] = ROOT_PATH
|
|
11
|
-
require 'debugger'
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
require 'rhoconnect/server'
|
|
15
|
-
require 'rhoconnect/web-console/server'
|
|
16
|
-
require 'resque/server'
|
|
4
|
+
# secret is generated along with the app
|
|
5
|
+
Rhoconnect::Server.set :secret, '3ddaa72a36466bae3fc5e54c09324db50cfc30588d8dee1a2700e61195bdbbb5eeb65da2a184d274ce644b20b0e986046c2447730c85555ce18a4eb2fce7ebf5'
|
|
17
6
|
|
|
18
|
-
#
|
|
19
|
-
|
|
7
|
+
# !!! Add your custom initializers and overrides here !!!
|
|
8
|
+
# For example, uncomment the following line to enable Stats
|
|
20
9
|
Rhoconnect::Server.enable :stats
|
|
21
|
-
Rhoconnect::Server.disable :clean_trace
|
|
22
|
-
Rhoconnect::Server.enable :raise_errors
|
|
23
|
-
Rhoconnect::Server.set :secret, '3ddaa72a36466bae3fc5e54c09324db50cfc30588d8dee1a2700e61195bdbbb5eeb65da2a184d274ce644b20b0e986046c2447730c85555ce18a4eb2fce7ebf5'
|
|
24
|
-
Rhoconnect::Server.set :root, ROOT_PATH
|
|
25
|
-
Rhoconnect::Server.use Rack::Static, :urls => ['/data'], :root => Rhoconnect::Server.root
|
|
26
10
|
|
|
27
|
-
# Load
|
|
11
|
+
# Load RhoConnect application
|
|
28
12
|
require './application'
|
|
29
13
|
require './my_server'
|
|
30
14
|
|
|
31
15
|
# Setup the url map
|
|
32
|
-
run
|
|
33
|
-
|
|
34
|
-
'/resque' => Resque::Server.new, # If you don't want resque frontend, disable it here
|
|
35
|
-
'/console' => RhoconnectConsole::Server.new # If you don't want rhoconnect frontend, disable it here
|
|
16
|
+
# run RhoConnect Application
|
|
17
|
+
run Rhoconnect.app
|
|
@@ -3,24 +3,24 @@ require 'rest_client'
|
|
|
3
3
|
|
|
4
4
|
class Product < SourceAdapter
|
|
5
5
|
def initialize(source)
|
|
6
|
-
@base = 'http://rhostore.
|
|
6
|
+
@base = 'http://rhostore.herokuapp.com/products'
|
|
7
7
|
super(source)
|
|
8
8
|
end
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
def query
|
|
11
11
|
parsed=JSON.parse(RestClient.get("#{@base}.json").body)
|
|
12
12
|
|
|
13
13
|
@result={}
|
|
14
14
|
if parsed
|
|
15
|
-
parsed.each do |item|
|
|
15
|
+
parsed.each do |item|
|
|
16
16
|
key = item["product"]["id"].to_s
|
|
17
17
|
@result[key]=item["product"]
|
|
18
18
|
end
|
|
19
|
-
end
|
|
19
|
+
end
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def sync
|
|
23
|
-
# Manipulate @result before it is saved, or save it
|
|
23
|
+
# Manipulate @result before it is saved, or save it
|
|
24
24
|
# yourself using the Rhoconnect::Store interface.
|
|
25
25
|
# By default, super is called below which simply saves @result
|
|
26
26
|
super
|
|
@@ -28,7 +28,7 @@ class Product < SourceAdapter
|
|
|
28
28
|
|
|
29
29
|
def create(create_hash)
|
|
30
30
|
# TODO: Create a new record in your backend data source
|
|
31
|
-
# If your rhodes rhom object contains image/binary data
|
|
31
|
+
# If your rhodes rhom object contains image/binary data
|
|
32
32
|
# (has the image_uri attribute), then a blob will be provided
|
|
33
33
|
raise "Please provide some code to create a single record in the backend data source using the create_hash"
|
|
34
34
|
end
|
data/generators/rhoconnect.rb
CHANGED
|
@@ -76,6 +76,11 @@ module Rhoconnect
|
|
|
76
76
|
template.destination = "#{name}/Gemfile"
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
+
template :gemfile_app do |template|
|
|
80
|
+
template.source = 'rcgemfile'
|
|
81
|
+
template.destination = "#{name}/.rcgemfile"
|
|
82
|
+
end
|
|
83
|
+
|
|
79
84
|
template :spec_helper do |template|
|
|
80
85
|
template.source = 'spec/spec_helper.rb'
|
|
81
86
|
template.destination = "#{name}/spec/spec_helper.rb"
|
|
@@ -1,43 +1,13 @@
|
|
|
1
1
|
source 'http://rubygems.org'
|
|
2
2
|
|
|
3
3
|
gem 'rhoconnect', '<%=gem_version%>'
|
|
4
|
+
gemfile_path = File.join(File.dirname(__FILE__), ".rcgemfile")
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
platforms :ruby, :ruby_19, :mingw, :mingw_19 do
|
|
11
|
-
gem "eventmachine", "~> 1.0.0.beta"
|
|
12
|
-
# using thin by default
|
|
13
|
-
gem 'thin'
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# for async framework
|
|
17
|
-
# for Async, Eventful execution
|
|
18
|
-
platforms :ruby_19, :mingw_19 do
|
|
19
|
-
gem 'rack-fiber_pool'
|
|
20
|
-
gem 'async-rack'
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
platforms :jruby do
|
|
24
|
-
gem 'jdbc-sqlite3', ">= 3.7.2"
|
|
25
|
-
gem 'dbi', ">= 0.4.5"
|
|
26
|
-
gem 'dbd-jdbc', ">= 0.1.4"
|
|
27
|
-
gem 'jruby-openssl', ">= 0.7.4"
|
|
28
|
-
gem 'trinidad'
|
|
29
|
-
gem 'warbler'
|
|
6
|
+
begin
|
|
7
|
+
eval(IO.read(gemfile_path))
|
|
8
|
+
rescue Exception => e
|
|
9
|
+
puts "ERROR: Couldn't read RhoConnect .rcgemfile"
|
|
10
|
+
exit 1
|
|
30
11
|
end
|
|
31
12
|
|
|
32
|
-
#
|
|
33
|
-
# gem 'sqlite3', ">= 1.3.3", :platforms => [:ruby, :mswin, :mingw]
|
|
34
|
-
|
|
35
|
-
group :development do
|
|
36
|
-
gem 'rhomobile-debug', ">= 1.0.2"
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
group :test do
|
|
40
|
-
gem 'rspec', '~> 2.10.0'
|
|
41
|
-
gem 'rack-test', '>= 0.5.3', :require => "rack/test"
|
|
42
|
-
gem 'rhomobile-debug', ">= 1.0.2"
|
|
43
|
-
end
|
|
13
|
+
# Add your application specific gems after this line ...
|
|
@@ -4,6 +4,14 @@ require 'rhoconnect/tasks'
|
|
|
4
4
|
require 'rhoconnect'
|
|
5
5
|
require 'resque/tasks'
|
|
6
6
|
|
|
7
|
+
ROOT_PATH = File.expand_path(File.dirname(__FILE__))
|
|
8
|
+
|
|
7
9
|
task 'resque:setup' do
|
|
10
|
+
# The number of redis connections you want a job to have
|
|
11
|
+
Rhoconnect.connection_pool_size = 1
|
|
8
12
|
require './application'
|
|
13
|
+
|
|
14
|
+
Resque.after_fork do
|
|
15
|
+
Store.db.client.reconnect
|
|
16
|
+
end
|
|
9
17
|
end
|
|
@@ -1,38 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
require '
|
|
3
|
-
require 'bundler'
|
|
4
|
-
Bundler.require
|
|
2
|
+
require 'rhoconnect/application/init'
|
|
5
3
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
if ENV['DEBUG'] == 'yes'
|
|
9
|
-
ENV['APP_TYPE'] = 'rhosync'
|
|
10
|
-
ENV['ROOT_PATH'] = ROOT_PATH
|
|
11
|
-
require 'debugger'
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
require 'rhoconnect/server'
|
|
15
|
-
require 'rhoconnect/web-console/server'
|
|
16
|
-
require 'resque/server'
|
|
4
|
+
# secret is generated along with the app
|
|
5
|
+
Rhoconnect::Server.set :secret, '<%= @secret %>'
|
|
17
6
|
|
|
18
|
-
#
|
|
7
|
+
# !!! Add your custom initializers and overrides here !!!
|
|
8
|
+
# For example, uncomment the following line to enable Stats
|
|
19
9
|
#Rhoconnect::Server.enable :stats
|
|
20
|
-
|
|
21
|
-
Rhoconnect
|
|
22
|
-
Rhoconnect
|
|
23
|
-
Rhoconnect
|
|
24
|
-
Rhoconnect::Server.set :root, ROOT_PATH
|
|
25
|
-
Rhoconnect::Server.use Rack::Static, :urls => ['/data'], :root => Rhoconnect::Server.root
|
|
26
|
-
# disable Async mode if Debugger is used
|
|
27
|
-
if ENV['DEBUG'] == 'yes'
|
|
28
|
-
Rhoconnect::Server.set :use_async_model, false
|
|
29
|
-
end
|
|
10
|
+
# uncomment the following line to disable Resque Front-end console
|
|
11
|
+
#Rhoconnect.disable_resque_console = true
|
|
12
|
+
# uncomment the following line to disable Rhoconnect Front-end console
|
|
13
|
+
#Rhoconnect.disable_rc_console = true
|
|
30
14
|
|
|
31
|
-
# Load
|
|
15
|
+
# Load RhoConnect application
|
|
32
16
|
require './application'
|
|
33
17
|
|
|
34
|
-
#
|
|
35
|
-
run
|
|
36
|
-
'/' => Rhoconnect::Server.new,
|
|
37
|
-
'/resque' => Resque::Server.new, # If you don't want resque frontend, disable it here
|
|
38
|
-
'/console' => RhoconnectConsole::Server.new # If you don't want rhoconnect frontend, disable it here
|
|
18
|
+
# run RhoConnect Application
|
|
19
|
+
run Rhoconnect.app
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Rhoconnect app runtime dependencies
|
|
2
|
+
# DO NOT edit this file unless you know what are you doing!
|
|
3
|
+
|
|
4
|
+
# Helps with some of the limitations of green threads, not needed in ruby 1.9.x
|
|
5
|
+
gem 'SystemTimer', '~> 1.2.3', :platforms => :ruby_18
|
|
6
|
+
|
|
7
|
+
# v0.7.x removes Process.fork, need this version for now
|
|
8
|
+
gem 'win32-process', '= 0.6.6', :platforms => [:mswin, :mingw]
|
|
9
|
+
|
|
10
|
+
# use thin and eventmachine everywhere except JRuby
|
|
11
|
+
platforms :ruby, :ruby_19, :mingw, :mingw_19 do
|
|
12
|
+
gem "eventmachine", "~> 1.0.0"
|
|
13
|
+
# using thin by default
|
|
14
|
+
gem 'thin'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# for async framework
|
|
18
|
+
# for Async, Eventful execution
|
|
19
|
+
platforms :ruby_19, :mingw_19 do
|
|
20
|
+
gem 'rack-fiber_pool'
|
|
21
|
+
gem 'async-rack'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
platforms :jruby do
|
|
25
|
+
gem 'jdbc-sqlite3', ">= 3.7.2"
|
|
26
|
+
gem 'dbi', ">= 0.4.5"
|
|
27
|
+
gem 'dbd-jdbc', ">= 0.1.4"
|
|
28
|
+
gem 'jruby-openssl', ">= 0.7.4"
|
|
29
|
+
gem 'trinidad'
|
|
30
|
+
gem 'warbler'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# uncomment the line below to use bulk sync: http://docs.rhomobile.com/rhoconnect/bulk-sync
|
|
34
|
+
# gem 'sqlite3', ">= 1.3.3", :platforms => [:ruby, :mswin, :mingw]
|
|
35
|
+
|
|
36
|
+
group :development do
|
|
37
|
+
gem 'rhomobile-debug', ">= 1.0.2"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
group :test do
|
|
41
|
+
gem 'rspec', '~> 2.10.0'
|
|
42
|
+
gem 'rack-test', '>= 0.5.3', :require => "rack/test"
|
|
43
|
+
gem 'rhomobile-debug', ">= 1.0.2"
|
|
44
|
+
end
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
:sources:
|
|
1
|
+
:sources:
|
|
2
2
|
|
|
3
3
|
:development:
|
|
4
4
|
:licensefile: settings/license.key
|
|
5
5
|
:redis: localhost:6379
|
|
6
6
|
:syncserver: http://localhost:9292/api/application/
|
|
7
|
-
:push_server: http://
|
|
7
|
+
:push_server: http://someappname@localhost:8675/
|
|
8
|
+
:api_token: my-rhoconnect-token
|
|
8
9
|
:test:
|
|
9
10
|
:licensefile: settings/license.key
|
|
10
11
|
:redis: localhost:6379
|
|
11
12
|
:syncserver: http://localhost:9292/api/application/
|
|
12
|
-
:push_server: http://
|
|
13
|
-
:
|
|
13
|
+
:push_server: http://someappname@localhost:8675/
|
|
14
|
+
:api_token: my-rhoconnect-token
|
|
15
|
+
:production:
|
|
14
16
|
:licensefile: settings/license.key
|
|
15
17
|
:redis: localhost:6379
|
|
16
18
|
:syncserver: http://localhost:9292/api/application/
|
|
17
|
-
:push_server: http://
|
|
19
|
+
:push_server: http://someappname@localhost:8675/
|
data/install.sh
CHANGED
|
@@ -183,10 +183,10 @@ logAndPrint ()
|
|
|
183
183
|
setRubyVars ()
|
|
184
184
|
{
|
|
185
185
|
if [[ $rubyVersion == "" || $rubyVersion =~ ruby'ee'|'enterprise' ]]; then
|
|
186
|
-
rubyVersion="ruby-1.9.3-
|
|
187
|
-
rubyDir="ruby-1.9.3-
|
|
186
|
+
rubyVersion="ruby-1.9.3-p286"
|
|
187
|
+
rubyDir="ruby-1.9.3-p286"
|
|
188
188
|
rubyTar="${rubyDir}.tar.gz"
|
|
189
|
-
# http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-
|
|
189
|
+
# http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p286.tar.gz
|
|
190
190
|
rubyURL="http://ftp.ruby-lang.org/pub/ruby/1.9/${rubyTar}"
|
|
191
191
|
elif [$rubyVersion == "ruby187"]; then
|
|
192
192
|
rubyDir="ruby-1.8.7"
|
|
@@ -217,7 +217,7 @@ installRuby ()
|
|
|
217
217
|
# rubyee)
|
|
218
218
|
# logAndPrint "${prefix}/${rubyDir}/installer --dont-install-useful-gems --no-dev-docs --auto ${prefix}"
|
|
219
219
|
# ;;
|
|
220
|
-
ruby-1.9.3-
|
|
220
|
+
ruby-1.9.3-p286)
|
|
221
221
|
(
|
|
222
222
|
echo "cd ${prefix}/${rubyDir}" | tee -a $log
|
|
223
223
|
cd ${prefix}/${rubyDir}
|
|
@@ -354,7 +354,7 @@ http {
|
|
|
354
354
|
access_log logs/access.log time_combined;
|
|
355
355
|
|
|
356
356
|
sendfile on;
|
|
357
|
-
keepalive_timeout
|
|
357
|
+
keepalive_timeout 30;
|
|
358
358
|
client_max_body_size 4m;
|
|
359
359
|
client_body_buffer_size 128k;
|
|
360
360
|
#gzip on;
|
|
@@ -402,6 +402,10 @@ server {
|
|
|
402
402
|
proxy_set_header Host $http_host;
|
|
403
403
|
proxy_redirect off;
|
|
404
404
|
|
|
405
|
+
proxy_connect_timeout 30;
|
|
406
|
+
proxy_send_timeout 30;
|
|
407
|
+
proxy_read_timeout 30;
|
|
408
|
+
|
|
405
409
|
proxy_pass http://thin_cluster;
|
|
406
410
|
}
|
|
407
411
|
|
|
@@ -726,4 +730,5 @@ rescue => ex
|
|
|
726
730
|
puts
|
|
727
731
|
puts "#{ex.message}"
|
|
728
732
|
exit(1)
|
|
729
|
-
end
|
|
733
|
+
end
|
|
734
|
+
|
|
@@ -8,10 +8,10 @@ module Constants
|
|
|
8
8
|
"libaprutil1-dev",
|
|
9
9
|
"dtach"]
|
|
10
10
|
|
|
11
|
-
RUBY = "ruby-1.9.3-
|
|
11
|
+
RUBY = "ruby-1.9.3-p286"
|
|
12
12
|
REDIS = "redis-2.4.17"
|
|
13
13
|
SQLITE3 = "sqlite-autoconf-3071000"
|
|
14
|
-
NGINX = "nginx-1.3.
|
|
14
|
+
NGINX = "nginx-1.3.7"
|
|
15
15
|
PASSENGER_ROOT = "/opt/rhoconnect/lib/ruby/gems/1.9.1/gems/passenger"
|
|
16
16
|
|
|
17
17
|
SOFTWARE = [ REDIS, SQLITE3, RUBY, NGINX ]
|
|
@@ -25,22 +25,7 @@ module Installers
|
|
|
25
25
|
|
|
26
26
|
# Update the RubyGems system software
|
|
27
27
|
cmd "#{@gem_path} update --system"
|
|
28
|
-
#
|
|
29
|
-
#install_gem 'foreman'
|
|
30
|
-
=begin
|
|
31
|
-
print_header "Installing eventmachine 1.0.0.beta.4 gem ..."
|
|
32
|
-
Dir.chdir("#{@options[:prefix]}")
|
|
33
|
-
`wget #{EVENTMACHINE_URL} -o /dev/null;tar xzfv master;rm -rf master`
|
|
34
|
-
Dir.chdir("#{@options[:prefix]}/rhomobile-eventmachine-6858b3b/")
|
|
35
|
-
cmd("#{@options[:prefix]}/bin/bundle install")
|
|
36
|
-
cmd("#{@options[:prefix]}/bin/gem build eventmachine.gemspec 2> /dev/null")
|
|
37
|
-
cmd("#{@options[:prefix]}/bin/gem install --local eventmachine-1.0.0.beta.4.gem --no-ri --no-rdoc")
|
|
38
|
-
res =$?
|
|
39
|
-
Dir.chdir("#{@options[:prefix]}")
|
|
40
|
-
cmd("rm -rf master rhomobile-eventmachine-6858b3b")
|
|
41
|
-
raise "eventmachine 1.0.0.0.beta4 installation failed." if res != 0
|
|
42
|
-
=end
|
|
43
|
-
# Install bundler, thin, ...
|
|
28
|
+
# Install bundler
|
|
44
29
|
GEMS.each do |gem|
|
|
45
30
|
install_gem gem
|
|
46
31
|
end
|
data/lib/rhoconnect.rb
CHANGED
|
@@ -29,34 +29,34 @@ require 'rhoconnect/dynamic_adapter'
|
|
|
29
29
|
|
|
30
30
|
REDIS_URL = 'REDIS' unless defined? REDIS_URL
|
|
31
31
|
REDISTOGO_URL = 'REDISTOGO_URL' unless defined? REDISTOGO_URL
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
# Various module utilities for the store
|
|
34
34
|
module Rhoconnect
|
|
35
35
|
APP_NAME = 'application' unless defined? APP_NAME
|
|
36
|
-
|
|
36
|
+
|
|
37
37
|
class InvalidArgumentError < RuntimeError; end
|
|
38
38
|
class RhoconnectServerError < RuntimeError; end
|
|
39
|
-
|
|
39
|
+
|
|
40
40
|
# Used by application authenticate to indicate login failure
|
|
41
41
|
class LoginException < RuntimeError; end
|
|
42
|
-
|
|
42
|
+
|
|
43
43
|
API_VERSION = 'v1'.freeze
|
|
44
|
-
|
|
44
|
+
|
|
45
45
|
extend self
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
class << self
|
|
48
|
-
attr_accessor :base_directory, :app_directory, :data_directory,
|
|
49
|
-
:vendor_directory, :blackberry_bulk_sync, :redis,
|
|
48
|
+
attr_accessor :base_directory, :app_directory, :data_directory,
|
|
49
|
+
:vendor_directory, :blackberry_bulk_sync, :redis,
|
|
50
50
|
:log_disabled, :license, :bulk_sync_poll_interval, :stats, :appserver, :api_token,
|
|
51
|
-
:raise_on_expired_lock, :lock_duration, :cookie_expire, :predefined_sources
|
|
51
|
+
:raise_on_expired_lock, :lock_duration, :cookie_expire, :predefined_sources,
|
|
52
|
+
:connection_pool_size, :connection_pool_timeout, :redis_timeout,
|
|
53
|
+
:disable_resque_console, :disable_rc_console
|
|
52
54
|
end
|
|
53
|
-
|
|
54
|
-
### Begin Rhoconnect setup methods
|
|
55
|
+
|
|
56
|
+
### Begin Rhoconnect setup methods
|
|
55
57
|
# Server hook to initialize Rhoconnect
|
|
56
58
|
def bootstrap(basedir)
|
|
57
59
|
config = get_config(basedir)
|
|
58
|
-
#Load environment
|
|
59
|
-
environment = (ENV['RHO_ENV'] || ENV['RACK_ENV'] || :development).to_sym
|
|
60
60
|
# Initialize Rhoconnect and Resque
|
|
61
61
|
Rhoconnect.base_directory = basedir
|
|
62
62
|
Rhoconnect.app_directory = get_setting(config,environment,:app_directory)
|
|
@@ -65,29 +65,37 @@ module Rhoconnect
|
|
|
65
65
|
Rhoconnect.blackberry_bulk_sync = get_setting(config,environment,:blackberry_bulk_sync,false)
|
|
66
66
|
Rhoconnect.bulk_sync_poll_interval = get_setting(config,environment,:bulk_sync_poll_interval,3600)
|
|
67
67
|
Rhoconnect.redis = get_setting(config,environment,:redis,false)
|
|
68
|
+
Rhoconnect.connection_pool_size ||= get_setting(config,environment,:connection_pool_size,5)
|
|
69
|
+
Rhoconnect.connection_pool_timeout = get_setting(config,environment,:connection_pool_timeout,30)
|
|
70
|
+
Rhoconnect.redis_timeout = get_setting(config,environment,:redis_timeout,30)
|
|
68
71
|
Rhoconnect.api_token = ENV['API_TOKEN'] || get_setting(config,environment,:api_token,false)
|
|
69
72
|
Rhoconnect.log_disabled = get_setting(config,environment,:log_disabled,false)
|
|
70
73
|
Rhoconnect.raise_on_expired_lock = get_setting(config,environment,:raise_on_expired_lock,false)
|
|
71
74
|
Rhoconnect.lock_duration = get_setting(config,environment,:lock_duration)
|
|
72
|
-
Rhoconnect.environment = environment
|
|
73
75
|
Rhoconnect.cookie_expire = get_setting(config,environment,:cookie_expire) || 31536000
|
|
74
76
|
Rhoconnect.predefined_sources = {}
|
|
75
77
|
yield self if block_given?
|
|
76
78
|
Store.create(Rhoconnect.redis)
|
|
77
|
-
Resque.redis =
|
|
79
|
+
Resque.redis = Rhoconnect.redis
|
|
78
80
|
Rhoconnect.base_directory ||= File.join(File.dirname(__FILE__),'..')
|
|
79
81
|
Rhoconnect.app_directory ||= Rhoconnect.base_directory
|
|
80
82
|
Rhoconnect.data_directory ||= File.join(Rhoconnect.base_directory,'data')
|
|
81
83
|
Rhoconnect.vendor_directory ||= File.join(Rhoconnect.base_directory,'vendor')
|
|
82
84
|
Rhoconnect.stats ||= false
|
|
83
85
|
Rhoconnect.license = License.new
|
|
84
|
-
|
|
86
|
+
Rhoconnect.disable_rc_console ||= false
|
|
87
|
+
Rhoconnect.disable_resque_console ||= false
|
|
88
|
+
|
|
85
89
|
check_and_add(File.join(Rhoconnect.app_directory,'sources'))
|
|
86
90
|
start_app(config)
|
|
87
91
|
create_admin_user
|
|
88
92
|
check_hsql_lib! if Rhoconnect.blackberry_bulk_sync
|
|
89
93
|
end
|
|
90
|
-
|
|
94
|
+
|
|
95
|
+
def environment
|
|
96
|
+
(ENV['RHO_ENV'] || ENV['RACK_ENV'] || :development).to_sym
|
|
97
|
+
end
|
|
98
|
+
|
|
91
99
|
def start_app(config)
|
|
92
100
|
if config and config[Rhoconnect.environment]
|
|
93
101
|
app = nil
|
|
@@ -109,15 +117,15 @@ module Rhoconnect
|
|
|
109
117
|
# load ruby file for source adapter to re-load class
|
|
110
118
|
load under_score(source_name+'.rb')
|
|
111
119
|
end
|
|
112
|
-
|
|
120
|
+
|
|
113
121
|
# load all pre-defined adapters files
|
|
114
122
|
Dir[File.join(File.dirname(__FILE__),'rhoconnect','predefined_adapters','*.rb')].each { |adapter| load adapter }
|
|
115
|
-
|
|
123
|
+
|
|
116
124
|
# Create associations for all sources
|
|
117
125
|
Source.update_associations(app.sources)
|
|
118
126
|
end
|
|
119
127
|
end
|
|
120
|
-
|
|
128
|
+
|
|
121
129
|
# Generate admin user on first load
|
|
122
130
|
def create_admin_user
|
|
123
131
|
unless User.is_exist?('rhoadmin')
|
|
@@ -131,7 +139,7 @@ module Rhoconnect
|
|
|
131
139
|
|
|
132
140
|
# Add path to load_path unless it has been added already
|
|
133
141
|
def check_and_add(path)
|
|
134
|
-
$:.unshift path unless $:.include?(path)
|
|
142
|
+
$:.unshift path unless $:.include?(path)
|
|
135
143
|
end
|
|
136
144
|
|
|
137
145
|
def get_config(basedir)
|
|
@@ -148,9 +156,10 @@ module Rhoconnect
|
|
|
148
156
|
force_default = source_config[:force_default]
|
|
149
157
|
source_config.delete(:force_default)
|
|
150
158
|
# apply global env settings
|
|
151
|
-
[:poll_interval].each do |setting|
|
|
159
|
+
[:poll_interval, :push_notify].each do |setting|
|
|
152
160
|
def_setting = env_config["#{setting.to_s}_default".to_sym]
|
|
153
|
-
|
|
161
|
+
def_setting ||= env_config[setting]
|
|
162
|
+
next unless def_setting
|
|
154
163
|
if source_config[setting].nil? or force_default
|
|
155
164
|
source_config[setting] = def_setting
|
|
156
165
|
end
|
|
@@ -161,10 +170,10 @@ module Rhoconnect
|
|
|
161
170
|
### End Rhoconnect setup methods
|
|
162
171
|
def register_predefined_source(source_name)
|
|
163
172
|
return if Rhoconnect.predefined_sources.has_key?(source_name)
|
|
164
|
-
|
|
173
|
+
|
|
165
174
|
Rhoconnect.predefined_sources[source_name] = {:source_loaded => false}
|
|
166
175
|
end
|
|
167
|
-
|
|
176
|
+
|
|
168
177
|
def create_predefined_source(source_name,params)
|
|
169
178
|
source_data = Rhoconnect.predefined_sources[source_name]
|
|
170
179
|
return unless source_data
|
|
@@ -177,16 +186,16 @@ module Rhoconnect
|
|
|
177
186
|
source_data[:source_loaded] = true
|
|
178
187
|
end
|
|
179
188
|
end
|
|
180
|
-
|
|
189
|
+
|
|
181
190
|
def check_default_secret!(secret)
|
|
182
|
-
if secret == '<changeme>'
|
|
191
|
+
if secret == '<changeme>'
|
|
183
192
|
log "*"*60+"\n\n"
|
|
184
193
|
log "WARNING: Change the session secret in config.ru from <changeme> to something secure."
|
|
185
194
|
log " i.e. running `rake rhoconnect:secret` in your rhoconnect app directory will generate a secret you could use.\n\n"
|
|
186
195
|
log "*"*60
|
|
187
196
|
end
|
|
188
197
|
end
|
|
189
|
-
|
|
198
|
+
|
|
190
199
|
def check_for_schema_field!(fields)
|
|
191
200
|
if fields['schema']
|
|
192
201
|
log "ERROR: 'schema' field in settings.yml is not supported anymore, please use source adapter schema method!"
|
|
@@ -212,7 +221,7 @@ module Rhoconnect
|
|
|
212
221
|
UUIDTools::UUID.random_create.to_s.gsub(/\-/,'')
|
|
213
222
|
end
|
|
214
223
|
|
|
215
|
-
# Generates new token (64-bit integer) based on # of
|
|
224
|
+
# Generates new token (64-bit integer) based on # of
|
|
216
225
|
# microseconds since Jan 1 2009
|
|
217
226
|
def get_token
|
|
218
227
|
((Time.now.to_f - Time.mktime(2009,"jan",1,0,0,0,0).to_f) * 10**6).to_i
|
|
@@ -250,7 +259,7 @@ module Rhoconnect
|
|
|
250
259
|
log "*"*60
|
|
251
260
|
end
|
|
252
261
|
end
|
|
253
|
-
|
|
262
|
+
|
|
254
263
|
def expire_bulk_data(username, partition = :user)
|
|
255
264
|
name = BulkData.get_name(partition,username)
|
|
256
265
|
data = BulkData.load(name)
|
|
@@ -292,22 +301,26 @@ module Rhoconnect
|
|
|
292
301
|
def timenow
|
|
293
302
|
(Time.now.to_f * 1000)
|
|
294
303
|
end
|
|
295
|
-
|
|
304
|
+
|
|
296
305
|
def log(*args)
|
|
297
306
|
now = Time.now.strftime('%I:%M:%S %p %Y-%m-%d')
|
|
298
307
|
puts "[#{now}] #{args.join}" unless Rhoconnect.log_disabled
|
|
299
308
|
end
|
|
300
|
-
|
|
309
|
+
|
|
301
310
|
def self.appserver
|
|
302
311
|
Store.get_value("appserver_url")
|
|
303
312
|
end
|
|
304
|
-
|
|
313
|
+
|
|
305
314
|
def self.appserver=(url)
|
|
306
315
|
Store.set_value("appserver_url",url)
|
|
307
316
|
end
|
|
308
|
-
|
|
317
|
+
|
|
318
|
+
def self.settings
|
|
319
|
+
@@settings ||= get_config(Rhoconnect.base_directory || ROOT_PATH)[Rhoconnect.environment]
|
|
320
|
+
end
|
|
321
|
+
|
|
309
322
|
# Base rhoconnect application class
|
|
310
|
-
class Base
|
|
323
|
+
class Base
|
|
311
324
|
# Add everything in vendor to load path
|
|
312
325
|
# TODO: Integrate with 3rd party dependency management
|
|
313
326
|
def self.initializer(path=nil)
|
|
@@ -319,16 +332,16 @@ module Rhoconnect
|
|
|
319
332
|
# Bootstrap Rhoconnect system
|
|
320
333
|
Rhoconnect.bootstrap(path || ENV['PWD'])
|
|
321
334
|
end
|
|
322
|
-
|
|
335
|
+
|
|
323
336
|
def self.store_blob(obj,field_name,blob)
|
|
324
337
|
blob[:tempfile].path if blob[:tempfile]
|
|
325
338
|
end
|
|
326
339
|
end
|
|
327
|
-
|
|
340
|
+
|
|
328
341
|
protected
|
|
329
342
|
def get_setting(config,environment,setting,default=nil)
|
|
330
343
|
res = nil
|
|
331
|
-
res = config[environment][setting] if config and environment
|
|
344
|
+
res = config[environment][setting] if config and environment
|
|
332
345
|
res || default
|
|
333
346
|
end
|
|
334
347
|
end
|