diff --git a/.gitignore b/.gitignore index 5e28dee54..4524de687 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ public/stylesheets/application.css public/stylesheets/sessions.css public/stylesheets/ui.css public/stylesheets/mobile.css +public/diaspora spec/fixtures/users.yaml # Uploded files and local files diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 625fe3f58..90d24de07 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -91,7 +91,7 @@ %li= link_to '@joindiaspora', "http://twitter.com/joindiaspora" %li= link_to 'github', "https://github.com/diaspora/diaspora" %li= link_to t('layouts.header.blog'), "http://blog.joindiaspora.com" - %li= link_to t('layouts.header.code'), "#{root_url}source.tar.gz" + %li= link_to t('layouts.header.code'), "#{root_url}/source.tar.gz" %li= link_to t('.whats_new'), 'https://github.com/diaspora/diaspora/wiki/Changelog' -if !@landing_page && request.url.match(/joindiaspora.com/) diff --git a/config/app_config.yml.example b/config/app_config.yml.example index 5d2617fd6..da05a5749 100644 --- a/config/app_config.yml.example +++ b/config/app_config.yml.example @@ -4,7 +4,7 @@ default: - # Hostname of this host, as seen from the internet. + # Url of this host, as seen from the internet. pod_url: "http://localhost:3000" # Set this to true in order to close signups. Users will still be @@ -68,12 +68,12 @@ default: #google analytics key, if false, it won't include the javascript google_a_site: false - + #piwik integration if not set, no javascript included - piwik_id: + piwik_id: # the site url in raw format (e.g. pikwik.examplehost.com) - piwik_url: - + piwik_url: + #cloudfiles username and api-key, used for backups cloudfiles_username: 'example' diff --git a/config/environment.rb b/config/environment.rb index 0586220b5..9b9b045f0 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -27,3 +27,5 @@ end # Initialize the rails application Diaspora::Application.initialize! +# Valid as long as thin serves the assets. +ActionController::Base.asset_host = APP_CONFIG[ :pod_url] diff --git a/config/initializers/_load_app_config.rb b/config/initializers/_load_app_config.rb index 8b4eda713..46e9d181b 100644 --- a/config/initializers/_load_app_config.rb +++ b/config/initializers/_load_app_config.rb @@ -8,35 +8,40 @@ # Specific items # * pod_url: As in app_config.yml, normalized with a trailing /. # * pod_uri: An uri object derived from pod_url. - -require 'uri' - -def load_config_yaml filename - YAML.load(File.read(filename)) -end - -if File.exist? "#{Rails.root}/config/app_config.yml" - all_envs = load_config_yaml "#{Rails.root}/config/app_config.yml" - all_envs = load_config_yaml "#{Rails.root}/config/app_config.yml.example" unless all_envs +# +if defined? APP_CONFIG + false else - puts "WARNING: No config/app_config.yml found! Look at config/app_config.yml.example for help." - all_envs = load_config_yaml "#{Rails.root}/config/app_config.yml.example" -end + require 'uri' -if all_envs[Rails.env.to_s] - APP_CONFIG = all_envs['default'].merge(all_envs[Rails.env.to_s]).symbolize_keys -else - APP_CONFIG = all_envs['default'].symbolize_keys -end + def load_config_yaml filename + YAML.load(File.read(filename)) + end -begin + if File.exist? "#{Rails.root}/config/app_config.yml" + all_envs = load_config_yaml "#{Rails.root}/config/app_config.yml" + all_envs = load_config_yaml "#{Rails.root}/config/app_config.yml.example" unless all_envs + else + puts "WARNING: No config/app_config.yml found! Look at config/app_config.yml.example for help." + all_envs = load_config_yaml "#{Rails.root}/config/app_config.yml.example" + end + + if all_envs[Rails.env.to_s] + APP_CONFIG = all_envs['default'].merge(all_envs[Rails.env.to_s]).symbolize_keys + else + APP_CONFIG = all_envs['default'].symbolize_keys + end + + begin APP_CONFIG[:pod_uri] = URI.parse( APP_CONFIG[:pod_url]) -rescue + rescue puts "WARNING: pod url " + APP_CONFIG[:pod_url] + " is not a legal URI" -end + end -APP_CONFIG[:pod_url] = APP_CONFIG[:pod_uri].normalize.to_s + APP_CONFIG[:pod_url] = APP_CONFIG[:pod_uri].normalize.to_s + APP_CONFIG[:pod_url].chomp!("/"); APP_CONFIG[:pod_url]+= '/' -if APP_CONFIG[:pod_uri].host == "example.org" && Rails.env != "test" + if APP_CONFIG[:pod_uri].host == "example.org" && Rails.env != "test" puts "WARNING: Please modify your app_config.yml to have a proper pod_url!" + end end diff --git a/config/routes.rb b/config/routes.rb index e8b45c3ac..fc760f684 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,54 +3,55 @@ # the COPYRIGHT file. Diaspora::Application.routes.draw do - resources :status_messages, :only => [:create, :destroy, :show] - resources :comments, :only => [:create] - resources :requests, :only => [:destroy, :create] - resources :services - - resources :notifications - resources :posts, :only => [:show], :path => '/p/' + scope APP_CONFIG[:pod_uri].path || '' do + resources :status_messages, :only => [:create, :destroy, :show] + resources :comments, :only => [:create] + resources :requests, :only => [:destroy, :create] + resources :services + resources :notifications + resources :posts, :only => [:show], :path => '/p/' - match '/people/share_with' => 'people#share_with', :as => 'share_with' - resources :people do - resources :status_messages - resources :photos + match '/people/share_with' => 'people#share_with', :as => 'share_with' + resources :people do + resources :status_messages + resources :photos + end + + match '/people/by_handle' => 'people#retrieve_remote', :as => 'person_by_handle' + match '/auth/:provider/callback' => 'services#create' + match '/auth/failure' => 'services#failure' + + match 'photos/make_profile_photo' => 'photos#make_profile_photo' + resources :photos, :except => [:index] + + devise_for :users, :controllers => {:registrations => "registrations", + :password => "devise/passwords", + :invitations => "invitations"} + # added public route to user + match 'public/:username', :to => 'users#public' + match 'getting_started', :to => 'users#getting_started', :as => 'getting_started' + match 'getting_started_completed', :to => 'users#getting_started_completed' + match 'users/export', :to => 'users#export' + match 'users/export_photos', :to => 'users#export_photos' + match 'login', :to => 'users#sign_up' + resources :users, :except => [:create, :new, :show] + + match 'aspects/move_contact', :to => 'aspects#move_contact', :as => 'move_contact' + match 'aspects/add_to_aspect', :to => 'aspects#add_to_aspect', :as => 'add_to_aspect' + match 'aspects/remove_from_aspect',:to => 'aspects#remove_from_aspect', :as => 'remove_from_aspect' + match 'aspects/manage', :to => 'aspects#manage' + resources :aspects, :except => [:edit] + + #public routes + match 'webfinger', :to => 'publics#webfinger' + match 'hcard/users/:id', :to => 'publics#hcard' + match 'receive/users/:id', :to => 'publics#receive' + match 'hub', :to => 'publics#hub' + + #root + root :to => 'home#show' end - - match '/people/by_handle' => 'people#retrieve_remote', :as => 'person_by_handle' - match '/auth/:provider/callback' => 'services#create' - match '/auth/failure' => 'services#failure' - - match 'photos/make_profile_photo' => 'photos#make_profile_photo' - resources :photos, :except => [:index] - - devise_for :users, :controllers => {:registrations => "registrations", - :password => "devise/passwords", - :invitations => "invitations"} - # added public route to user - match 'public/:username', :to => 'users#public' - match 'getting_started', :to => 'users#getting_started', :as => 'getting_started' - match 'getting_started_completed', :to => 'users#getting_started_completed' - match 'users/export', :to => 'users#export' - match 'users/export_photos', :to => 'users#export_photos' - match 'login', :to => 'users#sign_up' - resources :users, :except => [:create, :new, :show] - - match 'aspects/move_contact', :to => 'aspects#move_contact', :as => 'move_contact' - match 'aspects/add_to_aspect', :to => 'aspects#add_to_aspect', :as => 'add_to_aspect' - match 'aspects/remove_from_aspect',:to => 'aspects#remove_from_aspect', :as => 'remove_from_aspect' - match 'aspects/manage', :to => 'aspects#manage' - resources :aspects, :except => [:edit] - - #public routes - match 'webfinger', :to => 'publics#webfinger' - match 'hcard/users/:id', :to => 'publics#hcard' match '.well-known/host-meta',:to => 'publics#host_meta' - match 'receive/users/:id', :to => 'publics#receive' - match 'hub', :to => 'publics#hub' - - #root - root :to => 'home#show' end diff --git a/config/server.sh b/config/server.sh index 26125509b..8c3e9f083 100644 --- a/config/server.sh +++ b/config/server.sh @@ -1,16 +1,14 @@ # # Included by script/server # -THIN_PORT=3000 -SOCKET_PORT=8080 # Choose one mode by uncommenting export RAILS_ENV='development' #export RAILS_ENV='production' #export RAILS_ENV='test' -# See thin -h for possible values. -DEFAULT_THIN_ARGS="-p $THIN_PORT -e $RAILS_ENV" +# See thin -h for possible values. script/server sets -p . +DEFAULT_THIN_ARGS="-e $RAILS_ENV" # Set to 'no' to disable server dry-run at first start # creating generated files in public/ folder. diff --git a/script/get_env.sh b/script/get_env.sh new file mode 100755 index 000000000..44e77e491 --- /dev/null +++ b/script/get_env.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# +# Get value from APP_CONFIG +# +# Usage get_env [key ...] + +path=$( readlink -fn $0) && cd $(dirname $path)/.. || exit 2 + +if [[ ! -e tmp/environment || tmp/environment -ot config/app_config.yml ]] +then + ruby > tmp/environment << 'EOT' + require File.join('config', 'environment.rb') + APP_CONFIG.each { |key, value| puts key.to_s + "\t" + value.to_s } + puts "pod_uri.host\t" + APP_CONFIG[:pod_uri].host.to_s + puts "pod_uri.path\t" + APP_CONFIG[:pod_uri].path.to_s + puts "pod_uri.port\t" + APP_CONFIG[:pod_uri].port.to_s +EOT +fi + +for key in $@; do + awk -v key=$key '{ if ($1 == key ) print $2 }' < tmp/environment +done + diff --git a/script/server b/script/server index b20e0d59c..dcc3d457e 100755 --- a/script/server +++ b/script/server @@ -12,12 +12,17 @@ OS=`uname -s` function init_public # Create all dynamically generated files in public/ folder { + sub_uri=$(./script/get_env.sh pod_uri.path) + if [ -n "$sub_uri" ]; then + cd public; ln -sf . ${sub_uri##/}; cd .. + fi bundle exec thin \ -d --pid log/thin.pid --address localhost --port $THIN_PORT \ start + pod_url=$(./script/get_env.sh pod_url) for ((i = 0; i < 30; i += 1)) do sleep 2 - wget -q -O tmp/server.html http://localhost:$THIN_PORT && \ + wget -q -O tmp/server.html "$pod_url" && \ rm tmp/server.html && break done bundle exec thin --pid log/thin.pid stop @@ -75,14 +80,8 @@ function redis_config config/redis.conf } -# Scan for -p, find out what port thin is about to use. -args="$DEFAULT_THIN_ARGS $@" -prev_arg='' -for arg in $( echo $args | awk '{ for (i = 1; i <= NF; i++) print $i}') -do - [ "$prev_arg" = '-p' ] && THIN_PORT="$arg" - prev_arg="$arg" -done +THIN_PORT=$(./script/get_env.sh 'pod_uri.port') +SOCKET_PORT=$(./script/get_env.sh 'socket_port') # Is someone listening on the ports already? (ipv4 only test ?) services=$( chk_service $THIN_PORT ) @@ -107,8 +106,6 @@ if [ -n "$services" ]; then exit 64 fi - - # Check if Mongo is running if ! ps ax | grep -v grep | grep mongod >/dev/null then @@ -145,4 +142,4 @@ mkdir -p -v log/thin/ bundle exec ruby ./script/websocket_server.rb& redis-server config/redis.conf &>log/redis-console.log & QUEUE=* bundle exec rake resque:work& -bundle exec thin start $args +bundle exec thin start -p $THIN_PORT $@