Commit 9cd08bac authored by Alec Leamas's avatar Alec Leamas

Extended sub-uri support.

Adds new routing in routes.rb based on pod_uri. Assets are handled by a symlink
in public when using sub-uri. Various clean-up, removing thin and socket port
settings from server.sh (these are now taken from pod_uri and socket_port).

Basic functionality when setting a sub_uri like http://example.org/diaspora
now seems OK. Closes .http://joindiaspora.com/issues/737, and partially
http://joindiaspora.com/issues/391. Ports are yet to be defined and handled
in this context.

Conflicts:

	app/views/layouts/application.html.haml
	config/routes.rb
parent 42c602df
......@@ -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
......
......@@ -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/)
......
......@@ -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'
......
......@@ -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]
......@@ -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.
#
if defined? APP_CONFIG
false
else
require 'uri'
require 'uri'
def load_config_yaml filename
YAML.load(File.read(filename))
end
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
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 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
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
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
......@@ -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/'
match '/people/share_with' => 'people#share_with', :as => 'share_with'
resources :people do
resources :status_messages
resources :photos
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
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
#
# 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 <port>.
DEFAULT_THIN_ARGS="-e $RAILS_ENV"
# Set to 'no' to disable server dry-run at first start
# creating generated files in public/ folder.
......
#!/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
......@@ -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 $@
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment