rhoconnect 3.3.6 → 3.4.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|