From e22448fb5ce9d75586055f811b75b979a56bfd8f Mon Sep 17 00:00:00 2001 From: ken restivo Date: Thu, 8 Oct 2015 21:17:59 -0700 Subject: [PATCH 1/3] Update the post docs adding https://github.com/redmatrix/hubzilla/issues/67 --- doc/api_posting.bb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/api_posting.bb b/doc/api_posting.bb index fa9558268..c708ad143 100644 --- a/doc/api_posting.bb +++ b/doc/api_posting.bb @@ -4,19 +4,20 @@ The API allows you to post to the red# by HTTP POST request. Below you see an ex [code]curl -ssl -u [color=blue]$E-Mail[/color]:[color=blue]$Password[/color] -d "[color=blue]$Parameters[/color]" [url][observer=1][observer.baseurl][/observer][observer=0]example.com[/observer]/api/statuses/update [/url][/code] -[table][tr][td]$E-Mail:[/td][td]The E-Mail Adress you use to login[/td][/tr] +[table][tr][td]$E-Mail:[/td][td]The E-Mail Address you use to login, or the channel nickname (without the hostname)[/td][/tr] [tr][td]$Password:[/td][td]The Password you use to login[/td][/tr] [tr][td]$Parameters:[/td][td]That's the interesting part, here you insert the content you want to send using the following parameters:[/td][/tr][/table] [ul] [*]title: the title of the posting -[*]channel: the channel you want to post to +[*]channel: the channel you want to post to (do not use this parameter with HTTP Basic auth) [*]category: a comma-seperated list of categories for the posting [*]status: the content of the posting, formatted with BBCode OR [*]htmlstatus:the content of the posting, formatted in HTML. [/ul] +To post to a specific channel, replace the email address with the channel nickname. If you supply the channel parameter, it has to match the "email", but is superfluous anyway. Instead of calling [observer=1][observer.baseurl][/observer][observer=0]example.com[/observer]/api/statuses/update which returns a json (you could also add .json on the end to clarify) output, you can use [observer.baseurl]/api/statuses/update.xml to get an xml formatted return. From 85962a3eb13ab76bc565b19aca2d62153f6f670b Mon Sep 17 00:00:00 2001 From: Haakon Meland Eriksen Date: Fri, 9 Oct 2015 19:37:49 +0200 Subject: [PATCH 2/3] Updated Hubzilla on OpenShift README with HOWTO --- .openshift/README.md | 81 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/.openshift/README.md b/.openshift/README.md index 68061ca57..c778b8f32 100644 --- a/.openshift/README.md +++ b/.openshift/README.md @@ -1,3 +1,84 @@ +#Hubzilla on OpenShift +You will notice a new .openshift folder when you fetch from upstream, i.e. from https://github.com/redmatrix/hubzilla.git , which contains a deploy script to set up Hubzilla on OpenShift. + +Create an account on OpenShift, then use the registration e-mail and password to create your first Hubzilla instance. Install git and RedHat's command line tools - rhc - if you have not already done so. + +``` +rhc app-create your_app_name php-5.4 mysql-5.5 cron phpmyadmin --namespace your_domain --from-code https://github.com/redmatrix/hubzilla.git -l your@email.address -p your_account_password +``` + +Make a note of the database username and password OpenShift creates for your instance, and use these at https://your_app_name-your_domain.rhcloud.com/ to complete the setup. + +NOTE: PostgreSQL is NOT support yet. + +Update +To update, consider your own workflow first. I have forked Hubzilla code into my GitHub account to be able to try things out, this remote repo is called origin. Here is how I fetch new code from upstream, merge into my local repo, then push the updated code both into origin and the remote repo called openshift. + +``` +git fetch upstream;git checkout master;git merge upstream/master;git push origin;git push openshift HEAD +``` + +##Administration +Symptoms of need for MySQL database administration are: +- you can visit your domain and see the Hubzilla frontpage, but trying to login throws you back to login. This can mean your session table is marked as crashed. +- you can login, but your channel posts are not visible. This can mean your item table is marked as crashed. +- you can login and you can see your channel posts, but apparently nobody is getting your posts, comments, likes and so on. This can mean your outq table is marked as crashed. + +###How to fix crashed tables in MySQL +Using MySQL and the MyISAM database engine can result in table indexes coming out of sync, and you have at least two options for fixing tables marked as crashed. +- Use the database username and password OpenShift creates for your instance at #^https://your_app_name-your_domain.rhcloud.com/phpmyadmin/ to login via the web into your phpMyAdmin web interface, click your database in the left column, in the right column scroll down to the bottom of the list of tables and click the checkbox for marking all tables, then select Check tables from the drop down menu. This will check the tables for problems, and you can then checkmark only those tables with problems, and select Repair table from the same drop down menu at the bottom. +- You can login to your instance with SSH - see OpenShift for details - then + +``` +cd mysql/data/your_database +myisamchk -r *.MYI +``` + +or if you get + +``` +Can't create new tempfile +``` + +check your OpenShift's gear quota with + +``` +quota -gus +``` + +and if you are short on space, then locally (not SSH) do + +``` +rhc app-tidy your_app_name -l your_login -p your_password +``` + +to have rhc delete temporary files and OpenShift logs to free space first, then check the size of your local repo dir and execute + +``` +git gc +``` + +against it and check the size again, and then to minimize your remote repo connect via SSH to your application gear and execute the same command against it by changing to the remote repo directory - your repo should be in + +``` +~/git/your_app_name.git +``` + +(if not, do find -size +1M to find it), then do + +``` +cd ~/mysql/data/yourdatabase +myisamchk -r -v -f*.MYI +``` + +and hopefully your database tables are now okay. + +##NOTES +Note 1: definitely DO turn off feeds and discovery by default if you are on the Free or Bronze plan on OpenShift with a single 1Gb gear by visiting https://your-app-name.rhcloud.com/admin/site when logged in as administrator of your Hubzilla site. +Note 2: DO add the above defaults into the deploy script. +Note 3: DO add git gc to the deploy script to clean up git. +Note 4: MAYBE DO add myisamchk - only checking? to the end of the deploy script. + The OpenShift `php` cartridge documentation can be found at: http://openshift.github.io/documentation/oo_cartridge_guide.html#php From 22a5a91bd57bd81edcf1c4ccaba1e252f5eb23b4 Mon Sep 17 00:00:00 2001 From: jeroenpraat Date: Sun, 11 Oct 2015 00:05:41 +0200 Subject: [PATCH 3/3] Added Hubzilla banner to the Readme (for Github) --- README.md | 3 +-- images/hubzilla-banner.png | Bin 0 -> 13011 bytes 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 images/hubzilla-banner.png diff --git a/README.md b/README.md index 7fbc14219..db0ec04a7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +![Hubzilla](images/hubzilla-banner.png) Hubzilla - Community Server =========================== @@ -5,8 +6,6 @@ Hubzilla - Community Server Help us redefine the web - using integrated and united community websites. -------------------------------------------------------------------------- -![Hubzilla](images/hubzilla_house_arrows.png) - **What are Hubs?** Hubs are independent general-purpose websites that not only connect with their associated members and viewers, but also connect together to exchange personal communications and other information with each other. diff --git a/images/hubzilla-banner.png b/images/hubzilla-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..055a2a19e3617e14280a3a22d7f37c124edf1135 GIT binary patch literal 13011 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 E2g_jzxBvhE literal 0 HcmV?d00001