From 3aa21913650a2fa5ae1996a78b1fb462e18a6d59 Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Wed, 16 Jun 2010 19:42:39 -0700 Subject: [PATCH 01/24] RS IZ deploy stuffz --- Capfile | 4 ++ config/sprinkle/README | 15 ++++++ config/sprinkle/deploy.rb | 40 ++++++++++++++ config/sprinkle/diaspora.rb | 76 +++++++++++++++++++++++++++ config/sprinkle/packages/app.rb | 0 config/sprinkle/packages/database.rb | 22 ++++++++ config/sprinkle/packages/essential.rb | 9 ++++ config/sprinkle/packages/rails.rb | 47 +++++++++++++++++ config/sprinkle/packages/scm.rb | 12 +++++ config/sprinkle/packages/server.rb | 29 ++++++++++ 10 files changed, 254 insertions(+) create mode 100644 Capfile create mode 100644 config/sprinkle/README create mode 100644 config/sprinkle/deploy.rb create mode 100755 config/sprinkle/diaspora.rb create mode 100644 config/sprinkle/packages/app.rb create mode 100644 config/sprinkle/packages/database.rb create mode 100644 config/sprinkle/packages/essential.rb create mode 100644 config/sprinkle/packages/rails.rb create mode 100644 config/sprinkle/packages/scm.rb create mode 100644 config/sprinkle/packages/server.rb diff --git a/Capfile b/Capfile new file mode 100644 index 000000000..1a98f3cef --- /dev/null +++ b/Capfile @@ -0,0 +1,4 @@ +load 'deploy' if respond_to?(:namespace) # cap2 differentiator +Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) } + +load 'config/deploy' # remove this line to skip loading any of the default tasks diff --git a/config/sprinkle/README b/config/sprinkle/README new file mode 100644 index 000000000..d8b81d0f6 --- /dev/null +++ b/config/sprinkle/README @@ -0,0 +1,15 @@ += Example Rails Sprinkle Deployment Script + +The following example shows how you can provision Rails and associated packages onto a remote server (or set of servers). + +== Usage: + +$> sprinkle -s rails.rb + +or in test mode: + +$> sprinkle -t -s rails.rb + +== Information + +For more information, please see: http://github.com/crafterm/sprinkle/tree/master/README.markdown \ No newline at end of file diff --git a/config/sprinkle/deploy.rb b/config/sprinkle/deploy.rb new file mode 100644 index 000000000..492faa073 --- /dev/null +++ b/config/sprinkle/deploy.rb @@ -0,0 +1,40 @@ +set :user, 'diasporaroot' +set :scm_passphrase, "evankorth311" + +role :app, 'ps25770.dreamhost.com', :primary => true +# Source code +set :scm, :git +set :repository, "git://github.com:rsofaer/roxml.git" +set :branch, "master" +#set :repository_cache, "git_cache" +#set :deploy_via, :remote_cache +#set :ssh_options, { :forward_agent => true } + +set :deploy_to, "/usr/local/diaspora" + +namespace :bundler do + task :create_symlink, :roles => :app do + shared_dir = File.join(shared_path, 'bundle') + release_dir = File.join(current_release, '.bundle') + run("mkdir -p #{shared_dir} && ln -s #{shared_dir} #{release_dir}") + end + + task :bundle_new_release, :roles => :app do + bundler.create_symlink + run "cd #{release_path} && bundle install --without test" + end + + task :lock, :roles => :app do + run "cd #{current_release} && bundle lock;" + end + + task :unlock, :roles => :app do + run "cd #{current_release} && bundle unlock;" + end +end + +# HOOKS +after "deploy:update_code" do + bundler.bundle_new_release + # ... +end diff --git a/config/sprinkle/diaspora.rb b/config/sprinkle/diaspora.rb new file mode 100755 index 000000000..4d2d12e21 --- /dev/null +++ b/config/sprinkle/diaspora.rb @@ -0,0 +1,76 @@ +#!/usr/bin/env sprinkle -s + +# Annotated Example Sprinkle Rails deployment script +# +# This is an example Sprinkle script configured to install Rails from gems, Apache, Ruby, +# Sphinx and Git from source, and mysql and Git dependencies from apt on an Ubuntu system. +# +# Installation is configured to run via capistrano (and an accompanying deploy.rb recipe script). +# Source based packages are downloaded and built into /usr/local on the remote system. +# +# A sprinkle script is separated into 3 different sections. Packages, policies and deployment: + + +# Packages (separate files for brevity) +# +# Defines the world of packages as we know it. Each package has a name and +# set of metadata including its installer type (eg. apt, source, gem, etc). Packages can have +# relationships to each other via dependencies. + +require 'packages/essential' +require 'packages/database' +require 'packages/server' +require 'packages/scm' +require 'packages/rails' + +# Policies +# +# Names a group of packages (optionally with versions) that apply to a particular set of roles: +# +# Associates the rails policy to the application servers. Contains rails, and surrounding +# packages. Note, appserver, database, webserver and search are all virtual packages defined above. +# If there's only one implementation of a virtual package, it's selected automatically, otherwise +# the user is requested to select which one to use. + +policy :diaspora, :roles => :app do + requires :rubygems + requires :bundler + requires :diaspora_dependencies +# requires :diaspora + requires :appserver + requires :database +# requires :webserver + requires :scm +end + + +# Deployment +# +# Defines script wide settings such as a delivery mechanism for executing commands on the target +# system (eg. capistrano), and installer defaults (eg. build locations, etc): +# +# Configures spinkle to use capistrano for delivery of commands to the remote machines (via +# the named 'deploy' recipe). Also configures 'source' installer defaults to put package gear +# in /usr/local + +deployment do + + # mechanism for deployment + delivery :capistrano do + recipes 'deploy' + end + + # source based package installer defaults + source do + prefix '/usr/local' + archives '/usr/local/sources' + builds '/usr/local/build' + end + binary do + prefix '/usr/local/bin' + archives '/usr/local/sources' + end +end + +# End of script, given the above information, Spinkle will apply the defined policy on all roles using the +# deployment settings specified. diff --git a/config/sprinkle/packages/app.rb b/config/sprinkle/packages/app.rb new file mode 100644 index 000000000..e69de29bb diff --git a/config/sprinkle/packages/database.rb b/config/sprinkle/packages/database.rb new file mode 100644 index 000000000..bb820fcc0 --- /dev/null +++ b/config/sprinkle/packages/database.rb @@ -0,0 +1,22 @@ +#package :mongo, :provides => :database do +# description 'Mongodb' +# version '1.4.3' +# source "http://downloads.mongodb.org/src/mongodb-src-r#{version}.tar.gz" +#end + +package :mongodb, :provides => :database do + description 'Mongodb debian package.' + version '1.4.3' + + binary "http://downloads.mongodb.org/linux/mongodb-linux-x86_64-static-legacy-#{version}.tgz" do + post :install, "ln -s -f /usr/local/bin/mongodb-linux-x86_64-static-#{version}/bin/mongod /usr/bin/mongod" + end +end + +package :mongo_driver do + description 'Ruby mongo database driver' + gem 'mongo' + gem 'bson' + gem 'bson_ext' + requires :rubygems +end diff --git a/config/sprinkle/packages/essential.rb b/config/sprinkle/packages/essential.rb new file mode 100644 index 000000000..6d7074e17 --- /dev/null +++ b/config/sprinkle/packages/essential.rb @@ -0,0 +1,9 @@ +## Special package, anything that defines a 'source' package means build-essential should be installed for Ubuntu + +package :build_essential do + description 'Build tools' + apt 'build-essential' do + # Update the sources and upgrade the lists before we build essentials + pre :install, 'apt-get update' + end +end diff --git a/config/sprinkle/packages/rails.rb b/config/sprinkle/packages/rails.rb new file mode 100644 index 000000000..bba403f3b --- /dev/null +++ b/config/sprinkle/packages/rails.rb @@ -0,0 +1,47 @@ +## Defines available packages + +package :ruby do + description 'Ruby Virtual Machine' + version '1.8.7' + patchlevel '249' + source "ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-#{version}-p#{patchlevel}.tar.gz" # implicit :style => :gnu + requires :ruby_dependencies +end + +package :ruby_dependencies do + description 'Ruby Virtual Machine Build Dependencies' + apt %w( bison zlib1g-dev libssl-dev libreadline5-dev libncurses5-dev file ) +end + +package :rubygems do + description 'Ruby Gems Package Management System' + version '1.3.7' + source "http://production.cf.rubygems.org/rubygems/rubygems-#{version}.tgz" do + custom_install 'ruby setup.rb' + end + run( "PATH=$PATH:/var/lib/gems/1.8/bin") + run( "export PATH") + requires :ruby +end + +package :bundler do + description 'bundler' + version '0.9.26' + gem 'bundler' + requires :rubygems +end + +package :diaspora_dependencies do + description 'random dependencies' + apt %w(libxslt1.1 libxslt1-dev libxml2) +end +#package :diaspora do +# description 'Diaspora' + +=begin +package :rails do + description 'Ruby on Rails' + gem 'rails' + version '>=3.0.0b4' +end +=end diff --git a/config/sprinkle/packages/scm.rb b/config/sprinkle/packages/scm.rb new file mode 100644 index 000000000..b44fe0fd0 --- /dev/null +++ b/config/sprinkle/packages/scm.rb @@ -0,0 +1,12 @@ +package :git, :provides => :scm do + description 'Git Distributed Version Control' + apt %w( git-core ) + #version '1.6.3.3' + #source "http://kernel.org/pub/software/scm/git/git-#{version}.tar.gz" + #requires :git_dependencies +end + +package :git_dependencies do + description 'Git Build Dependencies' + apt 'git-core', :dependencies_only => true +end diff --git a/config/sprinkle/packages/server.rb b/config/sprinkle/packages/server.rb new file mode 100644 index 000000000..72c985880 --- /dev/null +++ b/config/sprinkle/packages/server.rb @@ -0,0 +1,29 @@ +package :mongrel do + description 'Mongrel Application Server' + gem 'mongrel' + version '1.1.5' +end + +package :mongrel_cluster, :provides => :appserver do + description 'Cluster Management for Mongrel' + gem 'mongrel_cluster' + version '1.0.5' + requires :mongrel +end + +package :apache, :provides => :webserver do + description 'Apache 2 HTTP Server' + version '2.2.15' + + source "http://download.nextag.com/apache/httpd/httpd-#{version}.tar.bz2" do + enable %w( mods-shared=all proxy proxy-balancer proxy-http rewrite cache headers ssl deflate so ) + prefix "/opt/local/apache2-#{version}" + post :install, 'install -m 755 support/apachectl /etc/init.d/apache2', 'update-rc.d -f apache2 defaults' + end + requires :apache_dependencies +end + +package :apache_dependencies do + description 'Apache 2 HTTP Server Build Dependencies' + apt %w( openssl libtool mawk zlib1g-dev libssl-dev ) +end From 9dd72123fc4379856a2bf662e00019c57faf8e42 Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Thu, 17 Jun 2010 16:24:02 -0700 Subject: [PATCH 03/24] deleted confusing deploy.rb --- config/sprinkle/deploy.rb | 40 ------------------------------------- config/sprinkle/diaspora.rb | 2 +- 2 files changed, 1 insertion(+), 41 deletions(-) delete mode 100644 config/sprinkle/deploy.rb diff --git a/config/sprinkle/deploy.rb b/config/sprinkle/deploy.rb deleted file mode 100644 index 492faa073..000000000 --- a/config/sprinkle/deploy.rb +++ /dev/null @@ -1,40 +0,0 @@ -set :user, 'diasporaroot' -set :scm_passphrase, "evankorth311" - -role :app, 'ps25770.dreamhost.com', :primary => true -# Source code -set :scm, :git -set :repository, "git://github.com:rsofaer/roxml.git" -set :branch, "master" -#set :repository_cache, "git_cache" -#set :deploy_via, :remote_cache -#set :ssh_options, { :forward_agent => true } - -set :deploy_to, "/usr/local/diaspora" - -namespace :bundler do - task :create_symlink, :roles => :app do - shared_dir = File.join(shared_path, 'bundle') - release_dir = File.join(current_release, '.bundle') - run("mkdir -p #{shared_dir} && ln -s #{shared_dir} #{release_dir}") - end - - task :bundle_new_release, :roles => :app do - bundler.create_symlink - run "cd #{release_path} && bundle install --without test" - end - - task :lock, :roles => :app do - run "cd #{current_release} && bundle lock;" - end - - task :unlock, :roles => :app do - run "cd #{current_release} && bundle unlock;" - end -end - -# HOOKS -after "deploy:update_code" do - bundler.bundle_new_release - # ... -end diff --git a/config/sprinkle/diaspora.rb b/config/sprinkle/diaspora.rb index 4d2d12e21..5f774ed7a 100755 --- a/config/sprinkle/diaspora.rb +++ b/config/sprinkle/diaspora.rb @@ -57,7 +57,7 @@ deployment do # mechanism for deployment delivery :capistrano do - recipes 'deploy' + recipes './../deploy' end # source based package installer defaults From 560269ef87c030e8d29aa382b6da924d5608d51c Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Thu, 17 Jun 2010 20:52:51 -0700 Subject: [PATCH 05/24] cleaning up sprinkle --- config/sprinkle/packages/app.rb | 0 config/sprinkle/packages/{rails.rb => ruby.rb} | 0 config/sprinkle/{diaspora.rb => provision.rb} | 10 +++++----- 3 files changed, 5 insertions(+), 5 deletions(-) delete mode 100644 config/sprinkle/packages/app.rb rename config/sprinkle/packages/{rails.rb => ruby.rb} (100%) rename config/sprinkle/{diaspora.rb => provision.rb} (95%) diff --git a/config/sprinkle/packages/app.rb b/config/sprinkle/packages/app.rb deleted file mode 100644 index e69de29bb..000000000 diff --git a/config/sprinkle/packages/rails.rb b/config/sprinkle/packages/ruby.rb similarity index 100% rename from config/sprinkle/packages/rails.rb rename to config/sprinkle/packages/ruby.rb diff --git a/config/sprinkle/diaspora.rb b/config/sprinkle/provision.rb similarity index 95% rename from config/sprinkle/diaspora.rb rename to config/sprinkle/provision.rb index 5f774ed7a..11b9970a7 100755 --- a/config/sprinkle/diaspora.rb +++ b/config/sprinkle/provision.rb @@ -33,14 +33,14 @@ require 'packages/rails' # the user is requested to select which one to use. policy :diaspora, :roles => :app do - requires :rubygems - requires :bundler +# requires :rubygems +# requires :bundler requires :diaspora_dependencies # requires :diaspora - requires :appserver - requires :database +# requires :appserver +# requires :database # requires :webserver - requires :scm +# requires :scm end From 178085b984b54b29df8b2453ec8dfdc71ba4e248 Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Fri, 18 Jun 2010 17:33:43 -0700 Subject: [PATCH 06/24] RS, IZ; A bunch of deploy stuff, including nginx, nginx_conf (maybe), and thin conf --- .gitignore | 1 + config/diaspora.conf | 39 +++++++++++++++++++ config/sprinkle/conf/nginx.conf | 32 +++++++++++++++ config/sprinkle/packages/essential.rb | 6 +++ config/sprinkle/packages/server.rb | 23 +++++++++++ .../packages/unfortunately_essential.rb | 9 +++++ config/sprinkle/provision.rb | 23 +++++------ config/thin.yml | 15 +++++++ 8 files changed, 137 insertions(+), 11 deletions(-) create mode 100644 config/diaspora.conf create mode 100644 config/sprinkle/conf/nginx.conf create mode 100644 config/sprinkle/packages/unfortunately_essential.rb mode change 100755 => 100644 config/sprinkle/provision.rb create mode 100644 config/thin.yml diff --git a/.gitignore b/.gitignore index a60443c6d..872e37d3a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .idea *.swp +*.swo .bundle db/*.sqlite3 log/*.log diff --git a/config/diaspora.conf b/config/diaspora.conf new file mode 100644 index 000000000..5bef74eb9 --- /dev/null +++ b/config/diaspora.conf @@ -0,0 +1,39 @@ +upstream thin_cluster { + server unix:/tmp/thin.0.sock; + server unix:/tmp/thin.1.sock; + server unix:/tmp/thin.2.sock; + server unix:/tmp/thin.3.sock; +} + +server { + + listen 80; + server_name localhash.com www.localhash.com; + root /opt/applications/example; + + location / { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_redirect off; + proxy_buffering off; + + if (-f $request_filename/index.html) { + rewrite (.*) $1/index.html break; + } + if (-f $request_filename.html) { + rewrite (.*) $1.html break; + } + if (!-f $request_filename) { + proxy_pass http://thin_cluster; + break; + } + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + +} + diff --git a/config/sprinkle/conf/nginx.conf b/config/sprinkle/conf/nginx.conf new file mode 100644 index 000000000..a6fcc2a3f --- /dev/null +++ b/config/sprinkle/conf/nginx.conf @@ -0,0 +1,32 @@ + +worker_processes 4; +pid /opt/nginx/sbin/nginx.pid; + +events { + worker_connections 8192; +} + +http { + + include mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] ' + '"$request" $status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + sendfile on; + + keepalive_timeout 65; + + gzip on; + gzip_http_version 1.0; + gzip_comp_level 2; + gzip_proxied any; + gzip_buffers 16 8k; + #gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; + # gzip_disable "MSIE [1-6]\.(?!.*SV1)"; + + include /usr/local/sbin/conf/servers/*.conf; +} + diff --git a/config/sprinkle/packages/essential.rb b/config/sprinkle/packages/essential.rb index 6d7074e17..394f2c6c3 100644 --- a/config/sprinkle/packages/essential.rb +++ b/config/sprinkle/packages/essential.rb @@ -7,3 +7,9 @@ package :build_essential do pre :install, 'apt-get update' end end + +package :tools do + description 'Useful tools' + apt 'psmisc' + requires :build_essential +end diff --git a/config/sprinkle/packages/server.rb b/config/sprinkle/packages/server.rb index 72c985880..0d77c9cc6 100644 --- a/config/sprinkle/packages/server.rb +++ b/config/sprinkle/packages/server.rb @@ -1,3 +1,25 @@ +package :nginx do + description 'Nginx HTTP server' + version '0.7.67' + source "http://nginx.org/download/nginx-#{version}.tar.gz" + requires :nginx_dependencies +end + +package :nginx_conf, :provides=> :webserver do + description 'Nginx conf file' + transfer "#{File.dirname(__FILE__)}/../conf/nginx.conf", '/usr/local/sbin/conf/nginx.conf', :render => true do + pre :install, "mkdir -p /usr/local/sbin/conf/" + end + requires :nginx +end + +package :nginx_dependencies do + description 'Nginx build dependencies' + apt %w( libc6 libpcre3 libpcre3-dev libssl0.9.8) + source "http://zlib.net/zlib-1.2.5.tar.gz" +end + +=begin package :mongrel do description 'Mongrel Application Server' gem 'mongrel' @@ -27,3 +49,4 @@ package :apache_dependencies do description 'Apache 2 HTTP Server Build Dependencies' apt %w( openssl libtool mawk zlib1g-dev libssl-dev ) end +=end diff --git a/config/sprinkle/packages/unfortunately_essential.rb b/config/sprinkle/packages/unfortunately_essential.rb new file mode 100644 index 000000000..a4114aabc --- /dev/null +++ b/config/sprinkle/packages/unfortunately_essential.rb @@ -0,0 +1,9 @@ +#Fix dreamhost +# + +package :clean_dreamhost do + description 'removes roadblocks in the standard DH PS image' + run 'apt-get -fy install' + run 'apt-get -y remove ruby' + run 'apt-get -y remove ruby1.8 --purge' +end diff --git a/config/sprinkle/provision.rb b/config/sprinkle/provision.rb old mode 100755 new mode 100644 index 11b9970a7..333c328cb --- a/config/sprinkle/provision.rb +++ b/config/sprinkle/provision.rb @@ -17,11 +17,12 @@ # set of metadata including its installer type (eg. apt, source, gem, etc). Packages can have # relationships to each other via dependencies. -require 'packages/essential' -require 'packages/database' -require 'packages/server' -require 'packages/scm' -require 'packages/rails' +require "#{File.dirname(__FILE__)}/packages/essential" +require "#{File.dirname(__FILE__)}/packages/database" +require "#{File.dirname(__FILE__)}/packages/server" +require "#{File.dirname(__FILE__)}/packages/scm" +require "#{File.dirname(__FILE__)}/packages/ruby" +#require "#{File.dirname(__FILE__)}/packages/unfortunately_essential" # Policies # @@ -33,14 +34,14 @@ require 'packages/rails' # the user is requested to select which one to use. policy :diaspora, :roles => :app do +# requires :clean_dreamhost +# requires :tools # requires :rubygems # requires :bundler - requires :diaspora_dependencies -# requires :diaspora -# requires :appserver +# requires :diaspora_dependencies # requires :database -# requires :webserver -# requires :scm + requires :webserver + requires :scm end @@ -57,7 +58,7 @@ deployment do # mechanism for deployment delivery :capistrano do - recipes './../deploy' + recipes "#{File.dirname(__FILE__)}/../deploy" end # source based package installer defaults diff --git a/config/thin.yml b/config/thin.yml new file mode 100644 index 000000000..830367a61 --- /dev/null +++ b/config/thin.yml @@ -0,0 +1,15 @@ +#rackup: /opt/applications/localhash/current/config.ru +#pid: /tmp/pids/thin.pid +wait: 30 +timeout: 600 +#log: /var/log/thin +#max_conns: 1024 +#require: [] + +#max_persistent_conns: 512 +environment: production +#servers: 4 +daemonize: true +#chdir: /usr/applications/localhash/current +socket: /tmp/thin.sock + From 414b18fb15eb145e9b6327e273c0830614182e63 Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Fri, 18 Jun 2010 17:37:56 -0700 Subject: [PATCH 07/24] added thin to gemfile --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index a37827cf3..32151c451 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem "bson_ext", "1.0.1" gem "haml" gem "devise", :git => "git://github.com/plataformatec/devise.git" gem 'roxml', :git => "git://github.com/Empact/roxml.git" - +gem "thin" group :test do gem 'rspec', '>= 2.0.0.beta.10' From bc9158eaeb173ff1c29cdffb79232acf907c7a6d Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Fri, 18 Jun 2010 17:46:52 -0700 Subject: [PATCH 08/24] changed thin yml --- config/thin.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/config/thin.yml b/config/thin.yml index 830367a61..30408b92a 100644 --- a/config/thin.yml +++ b/config/thin.yml @@ -1,14 +1,14 @@ -#rackup: /opt/applications/localhash/current/config.ru -#pid: /tmp/pids/thin.pid +rackup: /usr/local/app/diaspora/current/config.ru +pid: /tmp/pids/thin.pid wait: 30 timeout: 600 -#log: /var/log/thin -#max_conns: 1024 -#require: [] +log: /usr/local/log/thin +max_conns: 1024 +require: [] -#max_persistent_conns: 512 -environment: production -#servers: 4 +max_persistent_conns: 512 +#environment: production +servers: 1 daemonize: true #chdir: /usr/applications/localhash/current socket: /tmp/thin.sock From 8c988be7d9165b396eb79c11c4efbf012795966c Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Fri, 18 Jun 2010 17:49:46 -0700 Subject: [PATCH 09/24] changed yml again --- config/thin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/thin.yml b/config/thin.yml index 30408b92a..7f37f5d96 100644 --- a/config/thin.yml +++ b/config/thin.yml @@ -8,7 +8,7 @@ require: [] max_persistent_conns: 512 #environment: production -servers: 1 +servers: 4 daemonize: true #chdir: /usr/applications/localhash/current socket: /tmp/thin.sock From b9d3930c6165b9401477ef36b1c856b805a988f6 Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Fri, 18 Jun 2010 17:56:12 -0700 Subject: [PATCH 10/24] changing configures... --- config/diaspora.conf | 9 +++------ config/thin.yml | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/config/diaspora.conf b/config/diaspora.conf index 5bef74eb9..e5e3cd768 100644 --- a/config/diaspora.conf +++ b/config/diaspora.conf @@ -1,15 +1,12 @@ upstream thin_cluster { - server unix:/tmp/thin.0.sock; - server unix:/tmp/thin.1.sock; - server unix:/tmp/thin.2.sock; - server unix:/tmp/thin.3.sock; + server unix:/tmp/thin.sock; } server { listen 80; - server_name localhash.com www.localhash.com; - root /opt/applications/example; + server_name babycakes.sofaer.net www.babycakes.sofaer.net; + root /usr/local/app/diaspora/current; location / { proxy_set_header X-Real-IP $remote_addr; diff --git a/config/thin.yml b/config/thin.yml index 7f37f5d96..30408b92a 100644 --- a/config/thin.yml +++ b/config/thin.yml @@ -8,7 +8,7 @@ require: [] max_persistent_conns: 512 #environment: production -servers: 4 +servers: 1 daemonize: true #chdir: /usr/applications/localhash/current socket: /tmp/thin.sock From ac24a9bcef162dda3d0f75d7a5f494b4ce22f4d8 Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Fri, 18 Jun 2010 17:58:11 -0700 Subject: [PATCH 11/24] changing configures... --- config/diaspora.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/diaspora.conf b/config/diaspora.conf index e5e3cd768..2c517d7a8 100644 --- a/config/diaspora.conf +++ b/config/diaspora.conf @@ -1,5 +1,5 @@ upstream thin_cluster { - server unix:/tmp/thin.sock; + server unix:/tmp/thin.0.sock; } server { From c435ba28f9af9f2b0d81f02aec22ad611bf623ed Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Fri, 18 Jun 2010 18:09:57 -0700 Subject: [PATCH 12/24] changing configures... --- config/sprinkle/conf/nginx.conf | 4 ++-- config/sprinkle/packages/server.rb | 2 +- config/sprinkle/provision.rb | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/config/sprinkle/conf/nginx.conf b/config/sprinkle/conf/nginx.conf index a6fcc2a3f..4063304d3 100644 --- a/config/sprinkle/conf/nginx.conf +++ b/config/sprinkle/conf/nginx.conf @@ -1,6 +1,6 @@ -worker_processes 4; -pid /opt/nginx/sbin/nginx.pid; +worker_processes 1; +pid /tmp/pids/nginx.pid; events { worker_connections 8192; diff --git a/config/sprinkle/packages/server.rb b/config/sprinkle/packages/server.rb index 0d77c9cc6..99f326c8b 100644 --- a/config/sprinkle/packages/server.rb +++ b/config/sprinkle/packages/server.rb @@ -7,7 +7,7 @@ end package :nginx_conf, :provides=> :webserver do description 'Nginx conf file' - transfer "#{File.dirname(__FILE__)}/../conf/nginx.conf", '/usr/local/sbin/conf/nginx.conf', :render => true do + transfer "#{File.dirname(__FILE__)}/../conf/nginx.conf", '/usr/local/conf/nginx.conf', :render => true do pre :install, "mkdir -p /usr/local/sbin/conf/" end requires :nginx diff --git a/config/sprinkle/provision.rb b/config/sprinkle/provision.rb index 333c328cb..0ede8866d 100644 --- a/config/sprinkle/provision.rb +++ b/config/sprinkle/provision.rb @@ -35,11 +35,11 @@ require "#{File.dirname(__FILE__)}/packages/ruby" policy :diaspora, :roles => :app do # requires :clean_dreamhost -# requires :tools -# requires :rubygems -# requires :bundler -# requires :diaspora_dependencies -# requires :database + requires :tools + requires :rubygems + requires :bundler + requires :diaspora_dependencies + requires :database requires :webserver requires :scm end From cd1ed1d164ffa7fccf96a6f3581982b88d576d2c Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Fri, 18 Jun 2010 19:02:59 -0700 Subject: [PATCH 13/24] Hopefully final conf changes --- config/diaspora.conf | 36 ------------------------------- config/sprinkle/conf/nginx.conf | 38 +++++++++++++++++++++++++++++++-- config/sprinkle/provision.rb | 12 +++++------ 3 files changed, 42 insertions(+), 44 deletions(-) delete mode 100644 config/diaspora.conf diff --git a/config/diaspora.conf b/config/diaspora.conf deleted file mode 100644 index 2c517d7a8..000000000 --- a/config/diaspora.conf +++ /dev/null @@ -1,36 +0,0 @@ -upstream thin_cluster { - server unix:/tmp/thin.0.sock; -} - -server { - - listen 80; - server_name babycakes.sofaer.net www.babycakes.sofaer.net; - root /usr/local/app/diaspora/current; - - location / { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header Host $http_host; - proxy_redirect off; - proxy_buffering off; - - if (-f $request_filename/index.html) { - rewrite (.*) $1/index.html break; - } - if (-f $request_filename.html) { - rewrite (.*) $1.html break; - } - if (!-f $request_filename) { - proxy_pass http://thin_cluster; - break; - } - } - - error_page 500 502 503 504 /50x.html; - location = /50x.html { - root html; - } - -} - diff --git a/config/sprinkle/conf/nginx.conf b/config/sprinkle/conf/nginx.conf index 4063304d3..4b8227552 100644 --- a/config/sprinkle/conf/nginx.conf +++ b/config/sprinkle/conf/nginx.conf @@ -26,7 +26,41 @@ http { gzip_buffers 16 8k; #gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; # gzip_disable "MSIE [1-6]\.(?!.*SV1)"; - - include /usr/local/sbin/conf/servers/*.conf; +upstream thin_cluster { + server unix:/tmp/thin.0.sock; +} + +server { + + listen 80; + server_name babycakes.sofaer.net www.babycakes.sofaer.net; + root /usr/local/app/diaspora/current; + + location / { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_redirect off; + proxy_buffering off; + + if (-f $request_filename/index.html) { + rewrite (.*) $1/index.html break; + } + if (-f $request_filename.html) { + rewrite (.*) $1.html break; + } + if (!-f $request_filename) { + proxy_pass http://thin_cluster; + break; + } + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + +} + } diff --git a/config/sprinkle/provision.rb b/config/sprinkle/provision.rb index 0ede8866d..54d799a24 100644 --- a/config/sprinkle/provision.rb +++ b/config/sprinkle/provision.rb @@ -35,13 +35,13 @@ require "#{File.dirname(__FILE__)}/packages/ruby" policy :diaspora, :roles => :app do # requires :clean_dreamhost - requires :tools - requires :rubygems - requires :bundler - requires :diaspora_dependencies - requires :database +# requires :tools +# requires :rubygems +# requires :bundler +# requires :diaspora_dependencies +# requires :database requires :webserver - requires :scm +# requires :scm end From fbe89152501d1e13d5977918be0c74f623f8a0f9 Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Fri, 18 Jun 2010 22:08:17 -0700 Subject: [PATCH 14/24] IZ uncommented the lines for the rackspace deploy --- config/sprinkle/provision.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/config/sprinkle/provision.rb b/config/sprinkle/provision.rb index 54d799a24..0ede8866d 100644 --- a/config/sprinkle/provision.rb +++ b/config/sprinkle/provision.rb @@ -35,13 +35,13 @@ require "#{File.dirname(__FILE__)}/packages/ruby" policy :diaspora, :roles => :app do # requires :clean_dreamhost -# requires :tools -# requires :rubygems -# requires :bundler -# requires :diaspora_dependencies -# requires :database + requires :tools + requires :rubygems + requires :bundler + requires :diaspora_dependencies + requires :database requires :webserver -# requires :scm + requires :scm end From c3e557f47d5cd8f839b5e6e7aaa219febf3b00cd Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Fri, 18 Jun 2010 23:38:58 -0700 Subject: [PATCH 15/24] MS RS IZ start nginx & science --- science | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 science diff --git a/science b/science new file mode 100755 index 000000000..87ce701e0 --- /dev/null +++ b/science @@ -0,0 +1,5 @@ +#!/usr/bin/env ruby +`sprinkle -s config/sprinkle/provision.rb -v` +`cap deploy:setup` +`cap deploy:cold` +puts 'bababababa bababababa' From 807314d4697d59211cdfe885daa97d3830f33bd7 Mon Sep 17 00:00:00 2001 From: Raphael Sofaer Date: Fri, 18 Jun 2010 23:54:32 -0700 Subject: [PATCH 16/24] added htop to sprinkle --- config/sprinkle/packages/essential.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config/sprinkle/packages/essential.rb b/config/sprinkle/packages/essential.rb index 394f2c6c3..395c8309e 100644 --- a/config/sprinkle/packages/essential.rb +++ b/config/sprinkle/packages/essential.rb @@ -10,6 +10,5 @@ end package :tools do description 'Useful tools' - apt 'psmisc' - requires :build_essential + apt 'psmisc htop' end From 5afb97b5f7e278a3f1e2b59241f1551cd9c40fbc Mon Sep 17 00:00:00 2001 From: maxwell Date: Sat, 19 Jun 2010 00:49:35 -0700 Subject: [PATCH 18/24] dashboard controller stopped resolving, but the old behavior seems to work now...nnot sure why, could have been mongoid bug... --- app/controllers/dashboard_controller.rb | 3 ++- app/models/friend.rb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 7196b7fb5..f1fe520ea 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -4,7 +4,8 @@ class DashboardController < ApplicationController include ApplicationHelper def index - @posts = Post.stream + posts = Post.all.order_by( [:created_at, :desc] ) + @posts = posts end diff --git a/app/models/friend.rb b/app/models/friend.rb index 69b60fd36..d7c45c132 100644 --- a/app/models/friend.rb +++ b/app/models/friend.rb @@ -9,7 +9,7 @@ class Friend field :url validates_presence_of :username, :url - validates_format_of :url, :with => + givalidates_format_of :url, :with => /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ix before_validation :clean_url From f06b645b9cc14e29d95c90eacc8cac99f053bbdf Mon Sep 17 00:00:00 2001 From: maxwell Date: Sat, 19 Jun 2010 00:50:16 -0700 Subject: [PATCH 19/24] typo in Friend --- app/models/friend.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/friend.rb b/app/models/friend.rb index d7c45c132..69b60fd36 100644 --- a/app/models/friend.rb +++ b/app/models/friend.rb @@ -9,7 +9,7 @@ class Friend field :url validates_presence_of :username, :url - givalidates_format_of :url, :with => + validates_format_of :url, :with => /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ix before_validation :clean_url From ea7abccd72886d60a87f25811df30da6820e9577 Mon Sep 17 00:00:00 2001 From: maxwell Date: Sat, 19 Jun 2010 14:56:20 -0700 Subject: [PATCH 20/24] fixed the addressable issue; we needed to specify the actuall file the gem gets required as ::sigh:: --- Gemfile | 8 +++----- lib/message_handler.rb | 6 +++--- spec/spec_helper.rb | 4 ++-- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Gemfile b/Gemfile index 7c62324c5..530573c68 100644 --- a/Gemfile +++ b/Gemfile @@ -3,17 +3,15 @@ source 'http://rubygems.org' gem 'rails', '3.0.0.beta4' gem 'mongrel' gem 'thin' -gem 'em-http-request' -gem 'addressable' +gem 'em-http-request', :require => "em-http" +gem 'addressable', :require => "addressable/uri" gem "mongoid", :git => "git://github.com/durran/mongoid.git" gem "bson_ext", "1.0.1" gem "haml" gem "devise", :git => "git://github.com/plataformatec/devise.git" gem 'roxml', :git => "git://github.com/Empact/roxml.git" - -gem 'dm-core' #:( - + group :test do gem 'rspec', '>= 2.0.0.beta.12' gem 'rspec-rails', ">= 2.0.0.beta.8" diff --git a/lib/message_handler.rb b/lib/message_handler.rb index de4368f09..7d75ce08c 100644 --- a/lib/message_handler.rb +++ b/lib/message_handler.rb @@ -1,6 +1,6 @@ -require 'addressable/uri' -require 'eventmachine' -require 'em-http' +# require 'addressable/uri' +# require 'eventmachine' +# require 'em-http' class MessageHandler diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 060511f9a..d1152955e 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -16,7 +16,7 @@ Rspec.configure do |config| # # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: #this is a dumb hax TODO - config.mock_with :mocha + #config.mock_with :mocha # config.mock_with :flexmock # config.mock_with :rr config.mock_with :rspec @@ -41,5 +41,5 @@ Rspec.configure do |config| # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, comment the following line or assign false # instead of true. - config.use_transactional_fixtures = false + config.use_transactional_fixtures = true end From 5637fa4e4c694cac81cc667279bdfea124a0d943 Mon Sep 17 00:00:00 2001 From: maxwell Date: Sat, 19 Jun 2010 15:48:50 -0700 Subject: [PATCH 21/24] update em-http-request, removed the mutex because we are thin. also removed some uneeded config for database cleaner in the test setup env --- Gemfile | 2 +- config/environments/development.rb | 1 + config/environments/production.rb | 1 + config/environments/test.rb | 13 ------------- 4 files changed, 3 insertions(+), 14 deletions(-) diff --git a/Gemfile b/Gemfile index 530573c68..f6a5cbb1a 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'http://rubygems.org' gem 'rails', '3.0.0.beta4' gem 'mongrel' gem 'thin' -gem 'em-http-request', :require => "em-http" +gem 'em-http-request', :require => "em-http", :git => "git://github.com/igrigorik/em-http-request.git" gem 'addressable', :require => "addressable/uri" gem "mongoid", :git => "git://github.com/durran/mongoid.git" gem "bson_ext", "1.0.1" diff --git a/config/environments/development.rb b/config/environments/development.rb index dfb1f2e18..45d756166 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -16,4 +16,5 @@ Diaspora::Application.configure do # Don't care if the mailer can't send config.action_mailer.raise_delivery_errors = false + config.threadsafe! end diff --git a/config/environments/production.rb b/config/environments/production.rb index e47cce459..312da846d 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -43,4 +43,5 @@ Diaspora::Application.configure do # Enable locale fallbacks for I18n (makes lookups for any locale fall back to # the I18n.default_locale when a translation can not be found) config.i18n.fallbacks = true + config.threadsafe! end diff --git a/config/environments/test.rb b/config/environments/test.rb index 1a9134407..69a870933 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -29,18 +29,5 @@ Diaspora::Application.configure do # This is necessary if your schema can't be completely dumped by the schema dumper, # like if you have constraints or database-specific column types # config.active_record.schema_format = :sql - # - # - # - - - -begin - require 'database_cleaner' - DatabaseCleaner.strategy = :truncation - DatabaseCleaner.orm = "mongoid" -rescue LoadError => ignore_if_database_cleaner_not_present - puts "Error on cleaner" -end end From da9bcb8bec4a53ec1984f2571cb60ab99a70599d Mon Sep 17 00:00:00 2001 From: maxwell Date: Sat, 19 Jun 2010 15:53:37 -0700 Subject: [PATCH 22/24] just kidding. needed that test config, but pulled out some deprecated curl stuff hanging around statusmessages and checked tests accordingly --- app/controllers/status_messages_controller.rb | 2 +- app/models/status_message.rb | 4 ---- config/environments/test.rb | 9 +++++++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb index 0d9e1b9d8..23a2b342f 100644 --- a/app/controllers/status_messages_controller.rb +++ b/app/controllers/status_messages_controller.rb @@ -39,7 +39,7 @@ class StatusMessagesController < ApplicationController respond_to do |format| format.html - format.xml { render :xml => @status_message } + format.xml { render :xml => Post.build_xml_for(@status_message) } format.json { render :json => @status_message } end end diff --git a/app/models/status_message.rb b/app/models/status_message.rb index 0b58ee72b..82dbc00c6 100644 --- a/app/models/status_message.rb +++ b/app/models/status_message.rb @@ -1,6 +1,5 @@ class StatusMessage < Post include StatusMessagesHelper - require 'lib/net/curl' xml_name :status_message @@ -19,9 +18,6 @@ class StatusMessage < Post StatusMessage.newest(User.first.email) end - def self.retrieve_from_friend(friend) - StatusMessages.from_xml Curl.get(friend.url+"status_messages.xml") - end def ==(other) (self.message == other.message) && (self.owner == other.owner) diff --git a/config/environments/test.rb b/config/environments/test.rb index 69a870933..4aa5f96ec 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -29,5 +29,14 @@ Diaspora::Application.configure do # This is necessary if your schema can't be completely dumped by the schema dumper, # like if you have constraints or database-specific column types # config.active_record.schema_format = :sql + + +begin + require 'database_cleaner' + DatabaseCleaner.strategy = :truncation + DatabaseCleaner.orm = "mongoid" +rescue LoadError => ignore_if_database_cleaner_not_present + puts "Error on cleaner" +end end From eb2c3fd2e534cf8f217e1a13285c5f7f121212da Mon Sep 17 00:00:00 2001 From: ilya Date: Mon, 21 Jun 2010 15:01:12 -0400 Subject: [PATCH 24/24] fixed one spec bug in bookmarks --- spec/models/bookmark_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/models/bookmark_spec.rb b/spec/models/bookmark_spec.rb index f46b05dea..4c9ecd9c8 100644 --- a/spec/models/bookmark_spec.rb +++ b/spec/models/bookmark_spec.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../spec_helper' -describe Bookmark do +describe Bookmark do it "should have a link" do bookmark = Factory.build(:bookmark, :link => nil) bookmark.valid?.should be false @@ -61,7 +61,7 @@ describe Bookmark do describe "XML" do it 'should serialize to XML' do Factory.create(:user) - message = Factory.create(:bookmark, :title => "Reddit", :link => "http://reddit.com") + message = Factory.create(:bookmark, :title => "Reddit", :link => "http://reddit.com/") message.to_xml.to_s.should include "Reddit" message.to_xml.to_s.should include "http://reddit.com/" end