rhoconnect 3.0.0.beta1 → 3.0.0.beta3
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 +16 -2
- data/Gemfile +14 -5
- data/Gemfile.lock +13 -23
- data/Rakefile +86 -0
- data/bench/bench_runner.rb +5 -4
- data/bench/benchapp/Gemfile +17 -8
- data/bench/blobapp/Gemfile +13 -14
- data/doc/adapters-crm.txt +226 -0
- data/doc/adapters-intro.txt +18 -0
- data/doc/client.txt +29 -2
- data/doc/heroku-addon.txt +54 -0
- data/doc/install.txt +1 -2
- data/doc/migration.txt +18 -6
- data/doc/net-plugin.txt +276 -0
- data/doc/plugin-intro.txt +6 -0
- data/doc/push.txt +1 -1
- data/doc/rails-plugin.txt +116 -0
- data/doc/rest-api.txt +2 -2
- data/doc/settings.txt +59 -0
- data/doc/tutorial.txt +8 -5
- data/generators/rhoconnect.rb +30 -0
- data/generators/templates/application/Gemfile +16 -7
- data/generators/templates/application/gitignore +4 -0
- data/install.sh +74 -106
- data/installer/deb-scripts/LICENSE +75 -0
- data/installer/deb-scripts/install.sh +300 -0
- data/installer/deb-scripts/scripts/rho_connect_install_constants.rb +32 -0
- data/installer/deb-scripts/scripts/rho_connect_install_installers.rb +103 -0
- data/installer/deb-scripts/scripts/rho_connect_install_utilities.rb +110 -0
- data/installer/deb-scripts/scripts/rhoinstaller.rb +55 -0
- data/installer/deb-scripts/utils/README +67 -0
- data/installer/deb-scripts/utils/create_texts.rb +76 -0
- data/installer/deb-scripts/utils/redis_init_script +124 -0
- data/installer/deb-scripts/utils/redis_log_rotate +8 -0
- data/installer/unix-like/install.sh +361 -0
- data/installer/unix-like/post-install.sh +8 -0
- data/installer/unix-like/pre-install.sh +8 -0
- data/installer/unix-like/rho_connect_install_constants.rb +9 -14
- data/installer/unix-like/rho_connect_install_debian.rb +7 -5
- data/installer/unix-like/rho_connect_install_dnd.rb +6 -6
- data/installer/unix-like/rho_connect_install_get_params.rb +1 -1
- data/installer/unix-like/rho_connect_install_installers.rb +39 -38
- data/installer/unix-like/rho_connect_install_utilities.rb +9 -10
- data/installer/unix-like/rho_connect_install_yum.rb +6 -5
- data/installer/unix-like/rhoinstaller.rb +8 -3
- data/installer/utils/create_texts.rb +313 -85
- data/installer/windows/rhosync.nsi +5 -5
- data/lib/rhoconnect/api/application/clientcreate.rb +1 -1
- data/lib/rhoconnect/api/application/clientregister.rb +1 -1
- data/lib/rhoconnect/api/application/clientreset.rb +1 -1
- data/lib/rhoconnect/client.rb +0 -1
- data/lib/rhoconnect/client_sync.rb +1 -0
- data/lib/rhoconnect/console/app/routes/home.rb +1 -1
- data/lib/rhoconnect/console/app/routes/user.rb +8 -3
- data/lib/rhoconnect/console/app/views/adapter.erb +2 -2
- data/lib/rhoconnect/console/app/views/ping.erb +14 -2
- data/lib/rhoconnect/console/app/views/users.erb +8 -1
- data/lib/rhoconnect/jobs/ping_job.rb +11 -3
- data/lib/rhoconnect/model.rb +2 -2
- data/lib/rhoconnect/read_state.rb +2 -0
- data/lib/rhoconnect/server.rb +4 -3
- data/lib/rhoconnect/source.rb +33 -6
- data/lib/rhoconnect/source_adapter.rb +5 -9
- data/lib/rhoconnect/source_sync.rb +11 -5
- data/lib/rhoconnect/store.rb +7 -4
- data/lib/rhoconnect/tasks.rb +3 -3
- data/lib/rhoconnect/version.rb +1 -1
- data/lib/rhoconnect.rb +22 -8
- data/rhoconnect.gemspec +4 -22
- data/spec/api/application/rhoconnect_api_spec.rb +54 -8
- data/spec/api/source/get_source_params_spec.rb +2 -1
- data/spec/api/source/list_sources_spec.rb +3 -3
- data/spec/app_spec.rb +8 -1
- data/spec/apps/rhotestapp/settings/settings.yml +10 -5
- data/spec/apps/rhotestapp/sources/other_adapter.rb +7 -0
- data/spec/client_sync_spec.rb +5 -8
- data/spec/dynamic_adapter_spec.rb +8 -8
- data/spec/generator/generator_spec.rb +4 -2
- data/spec/jobs/ping_job_spec.rb +53 -0
- data/spec/model_spec.rb +2 -2
- data/spec/rhosync_spec.rb +1 -1
- data/spec/server/server_spec.rb +3 -14
- data/spec/source_sync_spec.rb +84 -2
- data/spec/support/shared_examples.rb +2 -2
- data/tasks/redis.rake +2 -2
- metadata +30 -41
- data/spec/api/rhosync_api_spec.rb.orig +0 -606
@@ -0,0 +1,300 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
# CONSTANTS
|
4
|
+
|
5
|
+
PASSENGER_VERSION="passenger-3.0.9"
|
6
|
+
|
7
|
+
RUBY="ruby-enterprise-1.8.7-2011.03"
|
8
|
+
REDIS="redis-2.2.12"
|
9
|
+
SQLITE3="sqlite-autoconf-3070701"
|
10
|
+
SOFTWARE= ($REDIS $SQLITE3)
|
11
|
+
|
12
|
+
RUBY_TAR="${RUBY}.tar.gz"
|
13
|
+
REDIS_TAR="${REDIS}.tar.gz"
|
14
|
+
SQLITE3_TAR="${SQLITE3}.tar.gz"
|
15
|
+
TARS=($REDIS_TAR $SQLITE3_TAR)
|
16
|
+
|
17
|
+
RUBY_URL="http://rubyenterpriseedition.googlecode.com/files/${RUBY_TAR}"
|
18
|
+
REDIS_URL="http://redis.googlecode.com/files/${REDIS_TAR}"
|
19
|
+
SQLITE3_URL="http://www.sqlite.org/${SQLITE3_TAR}"
|
20
|
+
URLS=($REDIS_URL $SQLITE3_URL)
|
21
|
+
|
22
|
+
GEMS=("bundler" "passenger")
|
23
|
+
|
24
|
+
PKG_MGR="apt-get"
|
25
|
+
|
26
|
+
WEB_SERVER="nginx"
|
27
|
+
|
28
|
+
WEB_SERVER_URL="http://localhost/"
|
29
|
+
|
30
|
+
DEFAULT_INSTALL_DIR="/opt/rhoconnect"
|
31
|
+
|
32
|
+
# INITIALIZATIONS
|
33
|
+
|
34
|
+
timeInitial=`date +%H%M%S`
|
35
|
+
installTime=$timeInitial
|
36
|
+
|
37
|
+
# FUNCTIONS
|
38
|
+
|
39
|
+
echoLog(){
|
40
|
+
echo -e $1 | tee -a $log
|
41
|
+
} #end echoLog
|
42
|
+
|
43
|
+
# cmd
|
44
|
+
# This method issues the given system command and calls log_print for output
|
45
|
+
cmd(){
|
46
|
+
cmd=$1
|
47
|
+
echoLog cmd
|
48
|
+
echoLog `${cmd}`
|
49
|
+
} #end cmd
|
50
|
+
|
51
|
+
checkDeps(){
|
52
|
+
deps=("zlib1g-dev" "libreadline5-dev" "build-essential" "libssl-dev"
|
53
|
+
"libcurl4-openssl-dev" "libapr1-dev" "libaprutil1-dev"
|
54
|
+
"gcc" "make" "wget")
|
55
|
+
i="0"
|
56
|
+
missing=""
|
57
|
+
|
58
|
+
while [[ ${deps[$i]} != "" ]]; do
|
59
|
+
pkg=${deps[$i]}
|
60
|
+
pkgChk=`dpkg -l | grep -w ${pkg}`
|
61
|
+
if [[ $pkgChk == "" ]]; then
|
62
|
+
missing=$missing$pkg"\n"
|
63
|
+
fi
|
64
|
+
i=$[i+1]
|
65
|
+
done
|
66
|
+
|
67
|
+
if [[ $missing != "" ]]; then
|
68
|
+
echoLog "Some dependencies must be installed before the setup can continue..."
|
69
|
+
echoLog $missing
|
70
|
+
exit
|
71
|
+
fi
|
72
|
+
|
73
|
+
} #end checkDeps
|
74
|
+
|
75
|
+
setPrefixDependantPaths (){
|
76
|
+
# if rubyBinDir not specified
|
77
|
+
if [$rubyBinDir == ""]; then
|
78
|
+
rubyBinDir="${prefix}/ruby/bin"
|
79
|
+
fi
|
80
|
+
|
81
|
+
# If logs directory does not exist, create it
|
82
|
+
if ! [[ -d "${prefix}/logs/" ]]; then
|
83
|
+
mkdir "${prefix}/logs/"
|
84
|
+
fi
|
85
|
+
|
86
|
+
# Make path to log file absolute and create directory if not already existent
|
87
|
+
log="${prefix}/logs/${log}"
|
88
|
+
touch $log
|
89
|
+
|
90
|
+
# Add the log file path to the info file
|
91
|
+
echo $log >> info.dat
|
92
|
+
cat info.dat
|
93
|
+
|
94
|
+
# Move info.dat into installation directory if not already there
|
95
|
+
if ! [ -e "${prefix}/info.dat" ]; then
|
96
|
+
mv info.dat "${prefix}/info.dat"
|
97
|
+
fi
|
98
|
+
} #end setPrefixDependantPaths
|
99
|
+
|
100
|
+
setDefaults (){
|
101
|
+
# if $prefix not specified set to /opt/rhoconnect
|
102
|
+
if [$prefix == ""]; then
|
103
|
+
prefix=$DEFAULT_INSTALL_DIR
|
104
|
+
fi
|
105
|
+
|
106
|
+
# if $webServer not specified set to apache2
|
107
|
+
if [$webServer == ""]; then
|
108
|
+
webServer=$WEB_SERVER
|
109
|
+
fi
|
110
|
+
} #end setDefaults
|
111
|
+
|
112
|
+
logAndPrint (){
|
113
|
+
$1 > tempout 2>&1
|
114
|
+
exitStatus=$?
|
115
|
+
cat tempout | tee -a $log
|
116
|
+
} #end logAndPrint
|
117
|
+
|
118
|
+
# installRuby
|
119
|
+
# Installs ruby enterprise edition
|
120
|
+
installRuby (){
|
121
|
+
if [[ ! -d "${prefix}${RUBY}" ]]; then
|
122
|
+
echoLog "Loading ruby tarball ..."
|
123
|
+
cmd "wget -P ${prefix} ${RUBY_URL}"
|
124
|
+
cmd "tar -xzf ${prefix}/${RUBY_TAR} -C ${prefix}"
|
125
|
+
fi
|
126
|
+
|
127
|
+
echoLog "Installing ruby. This may take some time..."
|
128
|
+
|
129
|
+
logAndPrint "${prefix}/${RUBY}/installer --dont-install-useful-gems --no-dev-docs --auto ${prefix}"
|
130
|
+
|
131
|
+
if [[ $exitStatus != 0 ]]; then
|
132
|
+
echoLog "Some dependencies not installed..."
|
133
|
+
echoLog "Please install them and then re-run the installation script."
|
134
|
+
exit
|
135
|
+
fi
|
136
|
+
|
137
|
+
PATH=${prefix}:$PATH
|
138
|
+
|
139
|
+
rm tempout
|
140
|
+
} #end installRuby
|
141
|
+
|
142
|
+
# download
|
143
|
+
# Downloads file stored at given URL to the given prefix unlessit already
|
144
|
+
# exists
|
145
|
+
download(){
|
146
|
+
url=$1
|
147
|
+
prefix=$2
|
148
|
+
downloads="./downloads"
|
149
|
+
found=""
|
150
|
+
|
151
|
+
if [ -e $downloads ]; then
|
152
|
+
while read line; do
|
153
|
+
if ! [ "${line}" == "${url}" ]; then
|
154
|
+
found="found"
|
155
|
+
fi
|
156
|
+
done < $downloads
|
157
|
+
fi
|
158
|
+
|
159
|
+
if [ "${found}" == "" ]; then
|
160
|
+
cmd "wget -P ${prefix} ${url}"
|
161
|
+
echo ${url} >> $downloads
|
162
|
+
fi
|
163
|
+
|
164
|
+
rm $downloads
|
165
|
+
} #end download
|
166
|
+
|
167
|
+
# decompress
|
168
|
+
# Decompresses downloaded files unless already decompressed directory
|
169
|
+
# exists
|
170
|
+
decompress(){
|
171
|
+
tar=$1
|
172
|
+
prefix=$2
|
173
|
+
|
174
|
+
cmd "tar -xzvf ${prefix}/${tar} -C ${prefix}"
|
175
|
+
} #end decompress
|
176
|
+
|
177
|
+
# downloadAndDecompress
|
178
|
+
# 1) Iterates through the the list of URLs and downloads each item
|
179
|
+
# 2) Iterates through the list of TARs and unpacks each one
|
180
|
+
downloadAndDecompress(){
|
181
|
+
prefix=$1
|
182
|
+
for (( i=0; i < ${#URLS[@]}; i++ )); do
|
183
|
+
download ${URLS[$i]} ${prefix}
|
184
|
+
done #for
|
185
|
+
|
186
|
+
for (( i=0; i < ${#TARS[@]}; i++ )); do
|
187
|
+
decompress ${#TARS[$i]} ${prefix}
|
188
|
+
done #for
|
189
|
+
} #end downloadAndDecompress
|
190
|
+
|
191
|
+
rhoinstaller(){
|
192
|
+
|
193
|
+
} #end rhoinstaller
|
194
|
+
|
195
|
+
# SCRIPT
|
196
|
+
checkDeps
|
197
|
+
|
198
|
+
# define log file name
|
199
|
+
datefile=`date +%Y%m%d%H%M%S`
|
200
|
+
log=rhoconnect_$(date +$datefile).log
|
201
|
+
|
202
|
+
# define option variables
|
203
|
+
opts=""
|
204
|
+
prefix=""
|
205
|
+
getVal=""
|
206
|
+
webServer=""
|
207
|
+
rubyBinDir=""
|
208
|
+
|
209
|
+
# Set default Values
|
210
|
+
setDefaults
|
211
|
+
|
212
|
+
# Set ruby insatallation variables
|
213
|
+
setRubyVars
|
214
|
+
|
215
|
+
# Once the prefix path is cleaned up...
|
216
|
+
setPrefixDependantPaths
|
217
|
+
|
218
|
+
# Install ruby if not already installed
|
219
|
+
if ! [ -e "${prefix}/bin/ruby" ]; then
|
220
|
+
installRuby
|
221
|
+
else
|
222
|
+
echoLog "Ruby already installed" | tee -a $log
|
223
|
+
fi
|
224
|
+
|
225
|
+
#!/opt/rhoconnect/bin/ruby
|
226
|
+
|
227
|
+
#require 'rho_connect_install_constants'
|
228
|
+
#require 'rho_connect_install_installers'
|
229
|
+
|
230
|
+
include Installers
|
231
|
+
|
232
|
+
module Utilities
|
233
|
+
extend self
|
234
|
+
|
235
|
+
# cleanup
|
236
|
+
# This method moves all compressed files from the installation directory
|
237
|
+
# that were downloaded by this installation process
|
238
|
+
def cleanup(options)
|
239
|
+
prefix = options[:prefix]
|
240
|
+
|
241
|
+
print_header "Cleaning up"
|
242
|
+
|
243
|
+
Dir.mkdir("#{prefix}/downloads") unless File.directory?("#{prefix}/downloads")
|
244
|
+
Constants::URLS.each do |url|
|
245
|
+
file = get_version url
|
246
|
+
if File.exists?("#{prefix}/#{file}")
|
247
|
+
cmd "rm -rf #{prefix}/downloads/#{file}"
|
248
|
+
cmd "mv #{prefix}/#{file}* #{prefix}/downloads"
|
249
|
+
end #if
|
250
|
+
end # do
|
251
|
+
end #cleanup
|
252
|
+
end #utilities
|
253
|
+
|
254
|
+
# set necessary variables
|
255
|
+
:dist => "debian",
|
256
|
+
:pkg_mgr => 'apt-get -y',
|
257
|
+
:pkg_chkr => 'dpkg -l',
|
258
|
+
:start_dir => `pwd`.strip,
|
259
|
+
:web_server => Constants::WEB_SERVER}
|
260
|
+
|
261
|
+
log = Logger.new(IO.readlines("#{@options[:prefix]}/info.dat").last.strip)
|
262
|
+
log.datetime_format = "%Y-%m-%d %H:%M:%S" # simplify time output
|
263
|
+
|
264
|
+
# execute_installation
|
265
|
+
# This method orchestrates the actual installation process
|
266
|
+
def execute_installation
|
267
|
+
install_sqlite @options
|
268
|
+
|
269
|
+
# Start installing
|
270
|
+
install_all_gems @options
|
271
|
+
configure_passenger @options
|
272
|
+
|
273
|
+
# Install Redis
|
274
|
+
install_redis @options
|
275
|
+
|
276
|
+
# Install rhoconnect
|
277
|
+
install_rhoconnect @options
|
278
|
+
|
279
|
+
# Remove downloaded tarballs and extracted directories
|
280
|
+
cleanup @options
|
281
|
+
end #execute_installation
|
282
|
+
|
283
|
+
# Start installation process
|
284
|
+
download_and_decompress @options[:prefix]
|
285
|
+
|
286
|
+
execute_installation
|
287
|
+
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
|
292
|
+
|
293
|
+
|
294
|
+
|
295
|
+
|
296
|
+
|
297
|
+
# Cleanup
|
298
|
+
rm "${prefix}/info.dat"
|
299
|
+
|
300
|
+
${prefix}/bin/ruby ./utils/create_texts.rb
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/opt/rhoconnect/bin/ruby
|
2
|
+
|
3
|
+
module Constants
|
4
|
+
|
5
|
+
PASSENGER_VERSION = "passenger-3.0.9"
|
6
|
+
|
7
|
+
#RUBYGEMS = "rubygems-1.8.5"
|
8
|
+
REDIS = "redis-2.2.12"
|
9
|
+
SQLITE3 = "sqlite-autoconf-3070701"
|
10
|
+
|
11
|
+
SOFTWARE = [REDIS,
|
12
|
+
SQLITE3]
|
13
|
+
|
14
|
+
#RUBYGEMS_URL = "http://rubyforge.org/frs/download.php/74954/" +
|
15
|
+
# "#{ RUBYGEMS }.tgz"
|
16
|
+
REDIS_URL = "http://redis.googlecode.com/files/#{ REDIS }.tar.gz"
|
17
|
+
SQLITE3_URL = "http://www.sqlite.org/sqlite-autoconf-3070701.tar.gz"
|
18
|
+
|
19
|
+
|
20
|
+
URLS = [REDIS_URL,
|
21
|
+
SQLITE3_URL]
|
22
|
+
|
23
|
+
GEMS = ["bundler", "passenger"]
|
24
|
+
|
25
|
+
SUPPORTED_PKG_MGRS = ["apt-get", "yum"]
|
26
|
+
|
27
|
+
WEB_SERVER = "nginx"
|
28
|
+
|
29
|
+
WEB_SERVER_URL = "http://localhost/"
|
30
|
+
|
31
|
+
DEFAULT_INSTALL_DIR = "/opt/rhoconnect"
|
32
|
+
end #Constants
|
@@ -0,0 +1,103 @@
|
|
1
|
+
#!/opt/rhoconnect/bin/ruby
|
2
|
+
|
3
|
+
require 'rho_connect_install_constants'
|
4
|
+
require 'readline'
|
5
|
+
|
6
|
+
module Installers
|
7
|
+
extend self
|
8
|
+
# configure_passenger
|
9
|
+
# This method installs items that were retrieved via wget as well as
|
10
|
+
# passenger
|
11
|
+
def configure_passenger(options)
|
12
|
+
@options = options
|
13
|
+
installs = 0
|
14
|
+
print_header "Configuring Passenger"
|
15
|
+
print_header "Configuring Nginx to work with Passenger"
|
16
|
+
cmd "#{@options[:prefix]}/bin/passenger-install-#{@options[:web_server]}-module " +
|
17
|
+
"--auto --auto-download --prefix=/opt/rhoconnect/bin"
|
18
|
+
if $? != 0
|
19
|
+
log_print "Passenger not configured."
|
20
|
+
exit
|
21
|
+
end #if
|
22
|
+
end #configure_passenger
|
23
|
+
|
24
|
+
# install_all_gems
|
25
|
+
# This method installs all gems specified in the GEMS list defined in the
|
26
|
+
# Constants file
|
27
|
+
def install_all_gems(options)
|
28
|
+
@options = options
|
29
|
+
@gem_path = "#{@options[:prefix]}/bin/gem"
|
30
|
+
Constants::GEMS.each do |gem|
|
31
|
+
install_gem gem
|
32
|
+
end #do
|
33
|
+
end #install_all_gems
|
34
|
+
|
35
|
+
# install_gem
|
36
|
+
# This method installs the given gem
|
37
|
+
def install_gem(gem)
|
38
|
+
cmd "#{@gem_path} install #{ gem } --no-ri --no-rdoc"
|
39
|
+
end #install_gem
|
40
|
+
|
41
|
+
# install_rubygems
|
42
|
+
# This method installs rubygems which was downloaded and untarred earlier
|
43
|
+
def install_rubygems
|
44
|
+
print_header "Installing Rubygems"
|
45
|
+
Dir.chdir("#{@options[:prefix]}/#{Constants::RUBYGEMS}")
|
46
|
+
cmd "#{@options[:prefix]}/bin/ruby setup.rb --prefix=#{@options[:prefix]}/#{Constants::RUBYGEMS}"
|
47
|
+
@gem_path = "#{@options[:prefix]}/bin/gem"
|
48
|
+
cmd "sed -n '1 c\#!/opt/rhoconnect/bin/ruby' #{@options[:prefix]}/bin/gem"
|
49
|
+
end #install_rubygems
|
50
|
+
|
51
|
+
# install_redis
|
52
|
+
# This method installs redis
|
53
|
+
def install_redis(options)
|
54
|
+
@options = options
|
55
|
+
puts "\nWould you like to install Redis (yes / no)?"
|
56
|
+
answer = STDIN.readline.strip.downcase
|
57
|
+
while answer != "yes" &&
|
58
|
+
answer != "no"
|
59
|
+
puts "Please answer yes or no."
|
60
|
+
end
|
61
|
+
|
62
|
+
if answer == "yes"
|
63
|
+
Dir.chdir("#{@options[:prefix]}/#{Constants::REDIS}/src")
|
64
|
+
cmd "make; make PREFIX=#{@options[:prefix]} install"
|
65
|
+
cmd "mkdir #{@options[:prefix]}/etc" unless File.exist? "#{@options[:prefix]}/etc"
|
66
|
+
|
67
|
+
#cmd "cp ../redis.conf #{@options[:prefix]}etc"
|
68
|
+
redis_conf_file = File.new("#{@options[:prefix]}/etc/redis.conf", 'w')
|
69
|
+
File.foreach("../redis.conf") do |line|
|
70
|
+
# daemonize no --> daemonize yes
|
71
|
+
# logfile stdout --> logfile /var/log/redis.log
|
72
|
+
if line =~ /^daemonize/
|
73
|
+
redis_conf_file << "daemonize yes" << "\n"
|
74
|
+
elsif line =~ /^logfile/
|
75
|
+
redis_conf_file << "logfile /var/log/redis.log" << "\n"
|
76
|
+
else
|
77
|
+
redis_conf_file << line
|
78
|
+
end
|
79
|
+
end
|
80
|
+
redis_conf_file.close
|
81
|
+
end #if
|
82
|
+
end #install_redis
|
83
|
+
|
84
|
+
# install_sqlite
|
85
|
+
# This method installs sqlite
|
86
|
+
def install_sqlite(options)
|
87
|
+
@options = options
|
88
|
+
Dir.chdir("#{@options[:prefix]}/#{Constants::SQLITE3}")
|
89
|
+
cmd "./configure --prefix=#{@options[:prefix]}"
|
90
|
+
cmd "make; make install"
|
91
|
+
end #install_sqlite
|
92
|
+
|
93
|
+
# install_rhoconnect
|
94
|
+
# This method installs rhoconnect
|
95
|
+
def install_rhoconnect(options)
|
96
|
+
@options = options
|
97
|
+
print_header "Installing Rhoconnect"
|
98
|
+
|
99
|
+
cmd "#{@gem_path} install rhoconnect-*.gem --no-ri --no-rdoc"
|
100
|
+
cmd "rm -f rhoconnect-*.gem"
|
101
|
+
|
102
|
+
end #install_rhoconnect
|
103
|
+
end #Installers
|
@@ -0,0 +1,110 @@
|
|
1
|
+
#!/opt/rhoconnect/bin/ruby
|
2
|
+
|
3
|
+
require 'rho_connect_install_constants'
|
4
|
+
require 'rho_connect_install_installers'
|
5
|
+
|
6
|
+
include Installers
|
7
|
+
|
8
|
+
module Utilities
|
9
|
+
extend self
|
10
|
+
|
11
|
+
# log_print
|
12
|
+
# This method displays, in minutes, how long the installation process took
|
13
|
+
def log_print(string)
|
14
|
+
puts string
|
15
|
+
@log.info {string} unless @log == nil
|
16
|
+
end #log_print
|
17
|
+
|
18
|
+
# cmd
|
19
|
+
# This method issues the given system command and calls log_print for output
|
20
|
+
def cmd(cmd)
|
21
|
+
log_print cmd
|
22
|
+
log_print `#{ cmd }`
|
23
|
+
end #cmd
|
24
|
+
|
25
|
+
#set_log_file
|
26
|
+
def set_log_file(log)
|
27
|
+
@log = log
|
28
|
+
end #set_log_file
|
29
|
+
|
30
|
+
# print_header
|
31
|
+
# This method displays a header surrounded by '=' characters consisting of
|
32
|
+
# the given string
|
33
|
+
def print_header(string)
|
34
|
+
header = "\n"
|
35
|
+
border = "===="
|
36
|
+
string.each_char { border << "=" }
|
37
|
+
header << border + "\n"
|
38
|
+
header << "= " + string + " =\n"
|
39
|
+
header << border +"\n"
|
40
|
+
log_print header
|
41
|
+
end #print_header
|
42
|
+
|
43
|
+
# download_and_decompress
|
44
|
+
# Delegates the download and decompression duties
|
45
|
+
def download_and_decompress(prefix)
|
46
|
+
print_header "Downloading and Decompressing"
|
47
|
+
downloads = 0
|
48
|
+
Constants::URLS.each do |url|
|
49
|
+
if !File.exists?("#{ get_tarball_name url }") ||
|
50
|
+
!File.exists?("#{ get_version url }")
|
51
|
+
wget_download prefix, url
|
52
|
+
decompress prefix, url
|
53
|
+
downloads += 1
|
54
|
+
end #if
|
55
|
+
end #do
|
56
|
+
end #download_and_decompress
|
57
|
+
|
58
|
+
# wget_download
|
59
|
+
# Takes a URL and the name of a tarball and issues a wget command on said
|
60
|
+
# URL unless the tarball or directory already exists
|
61
|
+
def wget_download(prefix, url)
|
62
|
+
if !File.exists?("#{ prefix }/#{ get_tarball_name url }") &&
|
63
|
+
!File.directory?("#{ prefix }/#{ get_version url }")
|
64
|
+
cmd "wget -P #{ prefix } #{ url }"
|
65
|
+
end #if
|
66
|
+
end #wget_download
|
67
|
+
|
68
|
+
# decompress
|
69
|
+
# Decompress downloaded files unless already decompressed directory
|
70
|
+
# exists
|
71
|
+
def decompress(prefix, url)
|
72
|
+
tarball = get_tarball_name(url)
|
73
|
+
dir = get_version(url)
|
74
|
+
cmd "tar -xzf #{ prefix }/#{ tarball } -C #{ prefix }" unless
|
75
|
+
File.directory? "#{ prefix }/#{ dir }"
|
76
|
+
end #decompress
|
77
|
+
|
78
|
+
# get_version
|
79
|
+
# This method extracts the untarballed name of files retrieved via wget
|
80
|
+
# from their URL
|
81
|
+
def get_version(url)
|
82
|
+
url =~ /.*\/(.*)\.t.*\Z/
|
83
|
+
$1
|
84
|
+
end #get_version
|
85
|
+
|
86
|
+
# get_tarball_name
|
87
|
+
# This method extracts the name of files retrieved via wget from their URL
|
88
|
+
def get_tarball_name(url)
|
89
|
+
url =~ /.*\/(.*\.t.*)/
|
90
|
+
$1
|
91
|
+
end #get_tarball_name
|
92
|
+
|
93
|
+
# cleanup
|
94
|
+
# This method moves all compressed files from the installation directory
|
95
|
+
# that were downloaded by this installation process
|
96
|
+
def cleanup(options)
|
97
|
+
prefix = options[:prefix]
|
98
|
+
|
99
|
+
print_header "Cleaning up"
|
100
|
+
|
101
|
+
Dir.mkdir("#{prefix}/downloads") unless File.directory?("#{prefix}/downloads")
|
102
|
+
Constants::URLS.each do |url|
|
103
|
+
file = get_version url
|
104
|
+
if File.exists?("#{prefix}/#{file}")
|
105
|
+
cmd "rm -rf #{prefix}/downloads/#{file}"
|
106
|
+
cmd "mv #{prefix}/#{file}* #{prefix}/downloads"
|
107
|
+
end #if
|
108
|
+
end # do
|
109
|
+
end #cleanup
|
110
|
+
end #Utilities
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#!/opt/rhoconnect/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), "..", "scripts"))
|
4
|
+
|
5
|
+
require 'logger'
|
6
|
+
require 'time'
|
7
|
+
require 'rho_connect_install_constants'
|
8
|
+
require 'rho_connect_install_utilities'
|
9
|
+
|
10
|
+
include Utilities
|
11
|
+
|
12
|
+
# Simplify logger output format: [timestamp] message
|
13
|
+
class Logger
|
14
|
+
class Formatter
|
15
|
+
#Format = "[%s] %s\n"
|
16
|
+
def call(severity, time, progname, msg)
|
17
|
+
"[%s] %s\n" % [format_datetime(time), msg]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# set necessary variables
|
23
|
+
@options = {:prefix => Constants::DEFAULT_INSTALL_DIR,
|
24
|
+
:dist => "debian",
|
25
|
+
:pkg_mgr => 'apt-get -y',
|
26
|
+
:pkg_chkr => 'dpkg -l',
|
27
|
+
:start_dir => `pwd`.strip,
|
28
|
+
:web_server => Constants::WEB_SERVER}
|
29
|
+
|
30
|
+
log = Logger.new(IO.readlines("#{@options[:prefix]}/info.dat").last.strip)
|
31
|
+
log.datetime_format = "%Y-%m-%d %H:%M:%S" # simplify time output
|
32
|
+
|
33
|
+
# execute_installation
|
34
|
+
# This method orchestrates the actual installation process
|
35
|
+
def execute_installation
|
36
|
+
install_sqlite @options
|
37
|
+
|
38
|
+
# Start installing
|
39
|
+
install_all_gems @options
|
40
|
+
configure_passenger @options
|
41
|
+
|
42
|
+
# Install Redis
|
43
|
+
install_redis @options
|
44
|
+
|
45
|
+
# Install rhoconnect
|
46
|
+
install_rhoconnect @options
|
47
|
+
|
48
|
+
# Remove downloaded tarballs and extracted directories
|
49
|
+
cleanup @options
|
50
|
+
end #execute_installation
|
51
|
+
|
52
|
+
# Start installation process
|
53
|
+
download_and_decompress @options[:prefix]
|
54
|
+
|
55
|
+
execute_installation
|
@@ -0,0 +1,67 @@
|
|
1
|
+
Thank you for choosing Rhomobile for your cross-platform app needs!
|
2
|
+
To finish this setup, please complete the following...
|
3
|
+
|
4
|
+
1) Add necessary bins to the path(s) of the users who will
|
5
|
+
be using this software. You may also wish to add these items
|
6
|
+
to ~/.profile to automatically add them upon login.
|
7
|
+
Ex:
|
8
|
+
|
9
|
+
A) All bins in the main bin deposit:
|
10
|
+
export PATH=/opt/rhoconnect/bin:$PATH
|
11
|
+
|
12
|
+
B) Bins specifically placed in the ruby/bin directory
|
13
|
+
export PATH=/opt/rhoconnect/ruby/1.8/bin:$PATH
|
14
|
+
|
15
|
+
Or if you had other versions of ruby installed previously to running
|
16
|
+
this installation, you may instead wish to simply create an alias
|
17
|
+
for the newly installed ruby.
|
18
|
+
|
19
|
+
Ex:
|
20
|
+
alias rubyee=/opt/rhoconnect/bin/ruby
|
21
|
+
|
22
|
+
B) Add the export line to ~/.profile:
|
23
|
+
export PATH=/opt/rhoconnect/bin:opt/rhoconnect/ruby/bin:$PATH
|
24
|
+
|
25
|
+
2) Rhoconnect installer configured redis server with the following settings:
|
26
|
+
|
27
|
+
A) redis.conf file is located in /opt/rhoconnect/etc/ directory with properties:
|
28
|
+
daemonize yes
|
29
|
+
pidfile /var/run/redis.pid
|
30
|
+
logfile /var/log/redis.log
|
31
|
+
|
32
|
+
B) Redis logrotate settings for /var/log/redis.log files defined in '/etc/logrotate.d/redis':
|
33
|
+
|
34
|
+
/var/log/redis.log {
|
35
|
+
rotate 3
|
36
|
+
missingok
|
37
|
+
notifempty
|
38
|
+
size 250k
|
39
|
+
create 0644 root root
|
40
|
+
compress
|
41
|
+
}
|
42
|
+
|
43
|
+
C) Redis start-up script '/etc/init.d/redis'.
|
44
|
+
You can start/stop redis server by running the following commands:
|
45
|
+
/etc/init.d/redis {start|stop}
|
46
|
+
|
47
|
+
3) Setup rhoconnect application directory
|
48
|
+
|
49
|
+
A) Put your application code in a directory called /var/www/rhoconnect
|
50
|
+
(make sure this is the root of your applictaion directory, i.e. /var/www/rhoconnect/config.ru should exist).
|
51
|
+
|
52
|
+
B) Make an empty public folder in the directory
|
53
|
+
$ mkdir /var/www/rhoconnect/public
|
54
|
+
|
55
|
+
4) Configure Apache2
|
56
|
+
A) Configure virtual host for rhoconnect application:
|
57
|
+
Edit the file /etc/apache2/sites-available/rhoconnect so that it
|
58
|
+
reflects your specifications.
|
59
|
+
|
60
|
+
B) Enable the virtual host:
|
61
|
+
$ sudo a2ensite rhoconnect
|
62
|
+
|
63
|
+
C) Load the passenger.load module
|
64
|
+
$ sudo a2enmod passenger
|
65
|
+
|
66
|
+
D) Restart apache to pick up the changes:
|
67
|
+
$ sudo /etc/init.d/apache2 restart
|