Coder Social home page Coder Social logo

gsdevkithome's Introduction

Open Source Development Kit for GemStone/S 64 Bit master branch:

NOTE - All new installations should be using https://github.com/GsDevKit/GsDevKit_home

The Development Kit for GemStone/S (GsDevKit) contains tools and compatiblity changes that sit on top of the GemStone/S 64 Bit product, providing a complete and powerful open-source development environment. The Development kit allows Pharo and Squeak developers to take advantage of GemStone's object persistence, along with a variety of open-source Smalltalk tools and frameworks.

The Development kit includes simplified processes for installating and managing the GemStone/S server.

Detailed instructions for configuring your OS and installing GemStone/S, GsDevKit, and starting tODE:

Additional supporting documentation:


##Development Kit Server Installation The following steps will install the GemStone/S and Development Kit server, and open the tODE IDE client image:

  1. Operating System Prerequisites
  2. Clone gsDevKitHome
  3. Define gsDevKitHome Environment Variables
  4. Install a GemStone stone
  5. Open a tODE client image
  6. Commit gsDevKitHome configuration changes to git

NOTE: Do not use sudo when running any of the commands in this document, unless explicitly instructed to do so.

###Operating System Prerequisites The Dev Kit server can be installed on Linux or Mac OS X. The following OS packages must be installed in your system for GsDevKit to work correctly in all cases:

  • 32 bit libraries - needed to run Pharo (headless)
  • curl - needed by FileTree
  • git - needed by GsDevKit and tODE
  • PAM - needed by GemStone server
  • ssl - needed by GemStone server
  • unzip - needed by FileTree
  • wget - needed by bin/installGemStone script

For a detailed instructions on installing the OS prerequisites, a full list of required/recommended packages, and scripts that perform the installation, see GsDevKit Operating System Prerequisite Installation.

###Clone gsDevKitHome Clone the gsDevKitHome project to your GemStone development server and create a unique branch to keep any changes you make for your project isolated from the Dev Kit master branch:

Fork the gsDevKitHome project, clone your fork to your local GemStone development server, and create a unique branch to keep any changes you make for your project isolated.

If you are new to github, see the detailed instructions. You will need to setup authentication (generally, SSH credentials) as well, to allow tODE to work.

git clone [email protected]:<yourAccountName>/gsDevKitHome.git
cd gsDevKitHome
  1. Create a unique branch for your work, and synchronize github
# The purpose of the branch is to have a place to make all your personal customizations. This way, 
# if you ever want to feed back changes to gsDevKitHome, your dev branch will be clean. Since the 
# basic use case is to have one branch for all your development. You may want to name it after 
# yourself!
git checkout -b  <your_branch_name>
# Where you push depends on your workflow. Since this is git, you have many options to host your 
# code (e.g. GitHub, BitBucket). If you want to simply push to your GitHub fork:
git push origin <your_branch_name>

###Define gsDevKitHome Environment Variables Define the $GS_HOME environment variable and add $GS_HOME/bin to your $PATH:

cd gsDevKitHome                # if you are not already located there
export GS_HOME=`pwd`
export PATH=$GS_HOME/bin:$PATH

To make sure they are always correctly defined, it's a good idea to update your .bashrc file with these $GS_HOME and $PATH definitions.

###Install a GemStone stone To install a GemStone stone, run the $GS_HOME/bin/installServer script. This script performs the following individual steps.

Before running the installServer script, please check on the GemStone/S 64 Bit product page for the latest versions and visit the Community and Web Edition Licensing page for information on the license included with the download and other options. It is recommended that you download and use the latest version of the GemStone/S 64 Bit product. The following creates a new stone named devKit based on version 3.2.6 of GemStone/S:

installServer devKit 3.2.8.1

Note that the script will prompt you for your password because it uses sudo to setup up your server for running GemStone.

###Open a tODE client image When the installServer script finishes, the tode client image is opened:

tode image

To manually open a tode client image, use the $GS_HOME/bin/todeClient script:

todeClient

####Open a tODE shell Once a tode client image is open, use the following menu to open a tode shell:

open tode shell

If an error occurs while attempting to open the tODE shell, see the tODE Test Login section of the Getting Started with tODE document for getting help diagnosing the problem.

####Open a tODE project list

Open a tODE a Project List Browser using the project list tODE command:

project list

For additional information on using tODE see the Getting Started with tODE document.

###Commit gsDevKitHome configuration changes to git commit the changes that you've made. (If you've forked the GitHub project, you should push the changes to your GitHub repository as well):

git status                          # see the changes that have been made
git add --all                       # stage the changed files
git commit -m"initial installation" # commit the changes


gsdevkithome's People

Contributors

dalehenrich avatar jbrichau avatar lisaalmarode avatar rjsargent avatar seandenigris avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gsdevkithome's Issues

0.0.1 to 1.0.0 todo items

  • make a 0.0.2 release, where the version of tODE uses tag 0.0.? that way I can easily patch gsDevKit and or tODE for users who continue to work with 0.0.2 and old version of tODE ... new version of tODE will be 0.1.x so I can use tag 0.? with 1.0.0
  • release notes
    • project loading theme
  • scripts to support new /sys structure
  • tode/sys/default/home/ contents
  • load tode project script based on loadProject script
    • bin/createTodeProjectStone and bin/installTodeProjectStone
    • projects/magritte3/bin/installMagritte3Stone, etc.
  • /sys/default/bin/validateStoneSysNodes man page updated to include dirs, packages and repos, etc.
  • install README edits
    • move tODE details to separate doc
      • review tODE Getting Started doc (new home) and make sure links are clean
    • include ubunutu system requirements (Issue #22)
    • include fix for Issue #48 in readme
    • web client license blurb (note about free email version of license)
    • Development Kit projects cleanup
      • projects readme
      • tODE project ... just to hook up the tode directory ...
        • cp /sys/stone/dirs/Tode/tode /sys/local/home/tode
        • mount @/sys/stone/dirs/Tode/tode /sys/local/home tode
      • pier3.0.0 (Seaside3.0 and swazoo)
      • magritte (Seaside3.1 and gem server)
      • seaside3.1 (zinc and gem server)
      • zinc 2.4.3.1
      • magritte3 (Seaside3.1, zinc and gem server)
    • tests/ ... alternate tode boottstrap and pe pointing at dev for tests (better alternative than -branch arg to scripts
    • include Mariano's X11 forwarding trick in os orereqs docs ... along with install instructions if needed

`/sys/stone/dirs` and `/sys/stone/repos` should be based on loaded projects only?

Right now both of these nodes are based on project entries in the /projects node, whether or not the project is actually loaded in the image ... this means that the github repos are all downloaded upon the first login into a stone ... which can be quite long ... I don't think that there is value to being able to look at the directory structure of projects that are not yet loaded ... perhaps if you've done something like Browse>baseline in the project list there might be value ...

pstack not installed or enabled on ubuntu12.04?

Got this doing a kill -USR1 on a stuck gem (3.2.4):

Sun Mar 22 09:25:10 PDT 2015
Could not attach to process.  If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user.  For more details, see /etc/sysctl.d/10-ptrace.conf
ptrace: Operation not permitted.
/home/dhenrich/gsDevKitHome/gemstone/stones/sample/product/bin/pstack.gdb:18: Error in sourced command file:
No symbol table is loaded.  Use the "file" command.

pid files needed for all executables (feedback from Mariano)

In my case, the start/stop stone has the init.d characteristic. So it COULD be used directly in /etc/init.d if desired.
From what I can see you are not storing stone pids in pid files, and this is needed (at least for mine) monit scripts.

break out stone dir creation as separate script/step (feedback from Mariano)

Mariano's point:

Is there a way to specify the "stones" folder? Because for example in my case I don't want to have them inside gsDevKit.

My response:

regarding the stones folder, I was thinking that symbolic links would be used ... I am getting to the point where I think that I need to break up the scripts a bit more and allow for the separate creation of the stone directory template (I am finding that I want to be able to customize how the stone gets created and that may involve some additional directory structure ) ... I guess the scripts could depend upon a little "data base of stone locations" implemented as a STON file with a dictionary of paths.... and with the stone template directory broken out separately a directory path could be an argument ...

`Do not clone as root` ...

It is worth mentioning that when the initial clone is made there is no need to run the clone as root and that it should be cloned such that the normal user has write permissions ... sudo is used where and when root operations are performed

unique username/password for each stone (from Mariano)

  • All my scripts (not only those stone-creation-startup-related) are prepared to:
    1. Run with a particular (specified) OS user
    2. Have a particular Gemstone user (I don't use DataCurator anywhere). Each stone has a similar DataCurator user + password.

Why this? Mostly because of security. I have each stone running with its own OS user, with the >> folders, logs, pids, locks, etc created with that OS user. I mean...all unix permission marking >> stuff tried to be for that user.

The IP address tODE is using to communicate with the netldi process is outdated

I left my house (yay!) and am in a coffee shop on their wifi. So my computer has a different IP address and I'm getting this error in the todeClient when attempting to connect to a running stone:

Topez ERROR: Error: Unable to create a GemStone session, check netldi log file.
service not found, on a.local getaddrinfo(host '192.168.2.7', service 'cms_ldi') failed
; service cms_ldi not found For further information about login failures, check the gem log file

Restarting the stone and netldi process doesn't help.

add waitstone option to startstone

On tavis I've hit a string of bad luck where, the stone hasn't had a chance to start before logins start happening, so in self defense I had to add a waitstone for travis ... might as well include an option for users too, since it is worth having on loaded systems

windows tODE Client installation fails

The remoteInstallation of tODE on a windows client fails due to the fact that Gembuilder related libs are not found and Pharo.exe is already present in the /gsDevKitHome/pharo...

createtODEImage fails on error that is not further logged.

Error during `installServer gs_246 2.4.6`

The file libgcirpc.so already exists and is read only ...

Saving to: `GemStone64Bit2.4.6-x86_64.Linux.zip'

100%[=========================================================================>] 119,200,662 5.72M/s   in 20s     

2014-12-03 13:24:21 (5.58 MB/s) - `GemStone64Bit2.4.6-x86_64.Linux.zip' saved [119200662/119200662]

[Info] Creating /opt/gemstone directory
[Warning] /opt/gemstone directory already exists
to replace it, remove or rename it and rerun this script
[Info] Uncompressing GemStone archive into /home/dhenrich/gsDevKitHome/gemstone/products/
[Info] Copying initial system.conf to data directory
[Warning] /home/dhenrich/gsDevKitHome/gemstone/products/GemStone64Bit2.4.6-x86_64.Linux/seaside/data/system.conf already exists
to replace it, remove or rename it and rerun this script
[Info] Copying initial Seaside repository to data directory
copy gci libraries
cp: cannot create regular file `/home/dhenrich/gsDevKitHome/pharo/pharo-vm/libgcirpc.so': Permission denied

what's up with the `logs` entries in the `/sys` structure?

I don't think that I'm doing anything specifically with these directories so they should be dropped:

  • $GS_HOME/tode/sys/default/logs
  • $GS_HOME/tode/sys/local/logs
  • $GS_HOME/tode/sys/stones/templates/logs

While we're here, the $GS_HOME/tode/sys/stones/templates/client and $GS_HOME/tode/sys/stones/templates/server dirs should be moved up the $GS_HOME/tode/sys/stones ... if there is a real use for them...

feature request: available-env

H!

I have a feature request. I would like to add gem start scripts to my gsDevKitHome installation. Those are in the need of own environment variables. Usually the best way to add these would be to exend the stone.env file provided by gsDevKit. I wonder if it would make sense to extend the bin/startStone file by reading a $GEMSTONE_ENV_DIR and starting all "available-env" files.
I am thinking of a functionality like the one availabe at apache server's "available-sites"/"enabled-sites" functionality.
That might make an update of gsDevKitHome easier once one might have extended it by such things like own scripts and environment variables.

Sebastian

More definitive `script is finished` needed for installServer and friends

Here's the current end of processing:

Bulk migrate of 0 candidate classes 
    No instance migrations performed.[12/12/2014 19:09:10.134 UTC]
  gci login: currSession 1 rpc gem processId 2424 OOB keep-alive interval 0

---Starting backup to '/home/notroot/gsDevKitHome/gemstone/stones/Dario/backups//tode.dbf' (12/12/2014 11:09:10)
---Finished backup to 12/12/2014 11:09:11 -- tode.dbf
---Starting backup to '/home/notroot/gsDevKitHome/gemstone/stones/Dario/backups//home.dbf' (12/12/2014 11:09:11)
---Finished backup to 12/12/2014 11:09:18 -- home.dbf
a Text for '[176463617 sz:9 TDObjectGatewayNode] /home/'

no newline. A pretty wimpy way to end a script...

netldi ports per stone (feedback from Mariano)

In my case, I want to control which port does the netldi for each stone use. So, upon stone creation, I specify: OS user and netldi port. Then, I store this port also in stone.env and I do creat a .topazini with that info. Why this? Well, because I want to know and control which port the netldi for each stone. Second, because I could never connect to gemstone either from topaz or gemtools or tode via the service name. I have to ALWAYS specify the netldi port rather than the name.

BTW...I think your generated .topazini is incomplete as is know. I tried to connect and it fails trying to search /opt/gemstone/locks/gs64ldi..LCK (of course, because you are not specifying netldi stuff in the .topazini so it is searching the default).

todeClientImage install fails: faulty filetree package validation logic

I just installed a new gsDevKitHome and during install process I get the following error even though all prereques are installed.
ster/repository [00a7df6:master] --- github://GsDevKit/Grease:master/repository
Fetched -> Grease-GemStone300-Core-JohanBrichau.5 --- github://GsDevKit/Grease:master/repository [00a7df6:master] --- github://GsDevKit/Grease:master/repository
Project: Metacello baseline
Project: FileTree baseline
Project: Gofer stable
Fetched -> GemStone-Interactions-dkh.12 --- github://glassdb/glass:master/repository [c27f75c:master] --- github://glassdb/glass:master/repository
...RETRY
...RETRYError: Error while installing tODEa UserDefinedError occurred (error 2318), reason:halt, Class category name 'Core-Squeak' for the class 'SystemOrganizer' is inconsistent with the package name 'Core.v3'
TDTopezGemStoneClient(Object)>>error:
TDTopezGemStoneClient>>installTode:forceGLASSInstall: in Block: [ :ex | self error: 'Error while installing tODE' ...etc...
BlockClosure>>cull:
MethodContext(ContextPart)>>handleSignal: in Block: [ self exceptionHandlerBlock cull: exception ]
BlockClosure>>ensure:

/sys/default/client/scripts/installServerTode2/ should be split out

for folks with existing stone structures, the code between the backups in /sys/default/client/scripts/installServerTode2/ needs to be run ... would be convenient to split that out ahead of time so that a single command can be documented as the conversion method:

jUst for grins here's the code of interest:

# Set up /sys node structure
mount --todeRoot sys/default /sys default
mount --todeRoot sys/local /sys local
mount --todeRoot sys/stones /sys stones
# ensure that --stoneRoot directory structure is present
/sys/default/bin/validateStoneSysNodes --files --repair
mount --stoneRoot / /sys stone
# Define /home and /projects based on a composition of the /sys nodes
mount --stoneRoot homeComposition.ston / home
mount --stoneRoot projectComposition.ston / projects

GsFile class>>_exists:onClient: can return nil

Here's a diff for the changes to the method to handle a nil or Boolean result:

----- Method: FileDirectory>>readOnlyFileNamed: (in category 'stream creation') -----readOnlyFileNamed: localFileName
    "Open the existing file with the given name in this directory for read-only access."

+   | fullName res |
-   | fullName |
    fullName := self fullNameFor: localFileName.
+   res := GsFile _exists: fullName onClient: self onClient.
+   (res == false or: [ res isNil ])
+     ifTrue: [ ^ self error: 'File named: ' , localFileName printString , ' does not exist.' ].
-   (GsFile _exists: fullName onClient: self onClient)
-     ifFalse: [ ^ self error: 'File named: ' , localFileName printString , ' does not exist.' ].
    ^ BinaryOrTextFile open: fullName mode: 'rb' onClient: self onClient

ubuntu system requirements

14.04:

sudo apt-get -y install git
sudo apt-get -y install curl
sudo apt-get install pstack
sudo apt-get -y install libpam0g:i386
sudo apt-get -y install libssl1.0.0:386
sudo apt-get -y install libssl1.0.0:i386
sudo apt-get -y install -qq gcc-multilib libstdc++6:i386
sudo apt-get -y install gdb
sudo ln -s /usr/lib/i386-lin-gnu/libstdc++.so.6 /usr/lib/i386-linux-gnu/libstdc++.so

sudo apt-get -y install libx11-6:i386
sudo apt-get -y install libgl1-mesa-dev:i386
sudo apt-get -y install libxcb-dri2-0:i386

12.04:

sudo apt-get -y update
sudo apt-get -y install git
sudo apt-get install pstack
sudo apt-get -y install unzip
sudo apt-get -y install libpam0g:i386
sudo apt-get -y install libssl1.0.0
sudo apt-get -y install libssl1.0.0:i386
sudo ln -s /lib/i386-linux-gnu/libpam.so.0 /lib/libpam.so.0
sudo apt-get -y install -qq gcc-multilib libstdc++6:i386
sudo apt-get -y install gdb
sudo ln -s /usr/lib/i386-lin-gnu/libstdc++.so.6 /usr/lib/i386-linux-gnu/libstdc++.so

sudo apt-get -y install xorg
sudo apt-get -y install openbox
sudo apt-get -y install libx11-6:i386
sudo apt-get -y install libgl1-mesa-dev:i386
sudo apt-get -y install libxcb-dri2-0:i386

tODE Server installation not working

Hi!

I've tried to install tODE on our server, but I always get an the folowing error-message:

a UserDefinedError occurred (error 2318), reason:halt, Name not found: Base

any idea whats going wrong, or what I'm missing?

We are running on gemstone 3.2.0, when I connect from tODE-Client to the server everything seam to be ok -> except the last message line: TODE not installed"...

if you need further informations, please let me know!

thank you
Marc

Here is the stack-trace:

UserDefinedError (AbstractException) >> _signalWith: @5 line 25
UserDefinedError (AbstractException) >> signal @2 line 47
MetacelloMCVersionSpec (Object) >> error: @6 line 7
[] in ExecBlock0 (MetacelloVersionSpec) >> resolveToLoadableSpec:forLoad:forMap:packages: @3 line 7
[] in ExecBlock0 (MetacelloVersionSpec) >> packageNamed:forLoad:forMap:ifAbsent: @26 line 22
Dictionary >> at:ifAbsent: @7 line 10
MetacelloMCVersionSpec (MetacelloVersionSpec) >> packageNamed:forLoad:forMap:ifAbsent: @2 line 4
MetacelloMCVersionSpec (MetacelloVersionSpec) >> resolveToLoadableSpec:forLoad:forMap:packages: @2 line 4
[] in ExecBlock1 (MetacelloVersionSpec) >> resolveToLoadableSpecs:forLoad:map: @2 line 12
[] in ExecBlock1 (Set) >> do: @2 line 11
[] in ExecBlock2 (KeyValueDictionary) >> keysDo: @2 line 7
KeyValueDictionary >> keysAndValuesDo: @18 line 15
KeyValueDictionary >> keysDo: @2 line 6
Set >> do: @3 line 11
MetacelloMCVersionSpec (MetacelloVersionSpec) >> resolveToLoadableSpecs:forLoad:map: @13 line 10
MetacelloMCVersionSpecLoader >> resolveToLoadableSpecs @3 line 2
MetacelloMCVersionSpecLoader >> load @4 line 4
MetacelloMCVersion >> executeLoadFromArray: @9 line 7
[] in ExecBlock1 (MetacelloMCVersion) >> fetchRequiredFromArray: @2 line 11
[] in ExecBlock0 (MetacelloPlatform) >> useStackCacheDuring:defaultDictionary: @2 line 9
ExecBlock0 (ExecBlock) >> on:do: @3 line 42
MetacelloGemStonePlatform (MetacelloPlatform) >> useStackCacheDuring:defaultDictionary: @9 line 10
[] in ExecBlock0 (MetacelloMCVersion) >> fetchRequiredFromArray: @6 line 11
ExecBlock0 (ExecBlock) >> ensure: @2 line 12
[] in ExecBlock0 (MetacelloMCVersion) >> fetchRequiredFromArray: @2 line 12
MetacelloGemStonePlatform (MetacelloPlatform) >> do:displaying: @2 line 3
MetacelloMCVersion >> fetchRequiredFromArray: @17 line 7
[] in ExecBlock1 (MetacelloMCProjectSpec) >> loadVersion: @26 line 38
[] in ExecBlock0 (MetacelloPlatform) >> useStackCacheDuring:defaultDictionary: @2 line 9
ExecBlock0 (ExecBlock) >> on:do: @3 line 42
MetacelloGemStonePlatform (MetacelloPlatform) >> useStackCacheDuring:defaultDictionary: @9 line 10
MetacelloMCBaselineOfProjectSpec (MetacelloMCProjectSpec) >> loadVersion: @21 line 24
MetacelloProjectSpecForLoad >> performLoad @26 line 18
MetacelloMCBaselineOfProjectSpec (MetacelloGenericProjectSpec) >> load @6 line 4
MetacelloProjectReferenceSpec >> loadUsing:gofer: @5 line 6
[] in ExecBlock1 (MetacelloCommonMCSpecLoader) >> linearLoadPackageSpecs:repositories: @2 line 6
OrderedCollection (Collection) >> do: @5 line 10
MetacelloFetchingMCSpecLoader (MetacelloCommonMCSpecLoader) >> linearLoadPackageSpecs:repositories: @5 line 6
[] in ExecBlock0 (MetacelloFetchingMCSpecLoader) >> linearLoadPackageSpecs:repositories: @2 line 4
ExecBlock0 (ExecBlock) >> ensure: @2 line 12
MetacelloLoaderPolicy >> pushLoadDirective:during: @6 line 7
MetacelloLoaderPolicy >> pushLinearLoadDirectivesDuring:for: @3 line 3
MetacelloFetchingMCSpecLoader >> linearLoadPackageSpecs:repositories: @3 line 4
MetacelloFetchingMCSpecLoader (MetacelloCommonMCSpecLoader) >> load @15 line 7
MetacelloMCVersionSpecLoader >> load @13 line 16
MetacelloMCVersion >> executeLoadFromArray: @9 line 7
[] in ExecBlock1 (MetacelloMCVersion) >> fetchRequiredFromArray: @2 line 11
[] in ExecBlock0 (MetacelloPlatform) >> useStackCacheDuring:defaultDictionary: @2 line 9
ExecBlock0 (ExecBlock) >> on:do: @3 line 42
MetacelloGemStonePlatform (MetacelloPlatform) >> useStackCacheDuring:defaultDictionary: @9 line 10
[] in ExecBlock0 (MetacelloMCVersion) >> fetchRequiredFromArray: @6 line 11
ExecBlock0 (ExecBlock) >> ensure: @2 line 12
[] in ExecBlock0 (MetacelloMCVersion) >> fetchRequiredFromArray: @2 line 12
MetacelloGemStonePlatform (MetacelloPlatform) >> do:displaying: @2 line 3
MetacelloMCVersion >> fetchRequiredFromArray: @17 line 7
[] in ExecBlock0 (MetacelloMCVersion) >> doLoadRequiredFromArray: @3 line 10
ExecBlock0 (ExecBlock) >> ensure: @2 line 12
MetacelloMCVersion >> doLoadRequiredFromArray: @22 line 16
String >> loadRequiredForMetacelloMCVersion: @3 line 3
MetacelloMCVersion >> load: @2 line 3
[] in ExecBlock0 (MetacelloScriptEngine) >> load:onProjectDownGrade:onProjectUpgrade: @10 line 16
ExecBlock0 (ExecBlock) >> on:do: @3 line 42
[] in ExecBlock0 (MetacelloScriptEngine) >> handleNotificationsForAction: @6 line 4
ExecBlock0 (ExecBlock) >> on:do: @3 line 42
MetacelloScriptEngine >> handleNotificationsForAction: @4 line 10
[] in ExecBlock0 (MetacelloScriptEngine) >> load:onProjectDownGrade:onProjectUpgrade: @2 line 5
ExecBlock0 (ExecBlock) >> ensure: @2 line 12
MetacelloProjectRegistration class >> copyRegistryRestoreOnErrorWhile: @8 line 14
MetacelloScriptEngine >> load:onProjectDownGrade:onProjectUpgrade: @2 line 3
MetacelloScriptEngine >> load: @2 line 3
[] in ExecBlock1 (MetacelloScriptExecutor) >> execute: @11 line 12
[] in ExecBlock1 (MetacelloScriptApiExecutor) >> executeString:do: @5 line 4
Array (Collection) >> do: @5 line 10
MetacelloScriptApiExecutor >> executeString:do: @5 line 4
String >> execute:against: @2 line 2
MetacelloScriptApiExecutor (MetacelloScriptExecutor) >> execute: @6 line 6
Metacello >> execute @6 line 5
Metacello >> load: @3 line 3
[] in Executed Code @10 line 11
[] in ExecBlock0 (GsDeployer) >> deploy: @8 line 8
ExecBlock0 (ExecBlock) >> on:do: @3 line 42
[] in ExecBlock0 (GsDeployer) >> deploy: @2 line 9
[] in ExecBlock0 (MCPlatformSupport class) >> commitOnAlmostOutOfMemoryDuring: @3 line 7
ExecBlock0 (ExecBlock) >> ensure: @2 line 12
MCPlatformSupport class >> commitOnAlmostOutOfMemoryDuring: @6 line 8
[] in ExecBlock0 (GsDeployer) >> mcPlatformSupportDo: @2 line 10
ExecBlock0 (ExecBlock) >> ensure: @2 line 12
GsDeployer >> mcPlatformSupportDo: @10 line 10
GsDeployer >> deploy: @2 line 3
GsDeployer class >> bulkMigrate: @4 line 14
Executed Code @2 line 1
UndefinedObject (GsNMethod class) >> _gsReturnToC @1 line 1

1.0.0 to 2.0.0 compat ideas

  • symbolic link from tode/sys/default/clients to tode/clients (similar link for server(?))
  • composition that includes tode/home for home directories
  • directory map of tode/sys documenting the directory structure
  • anything else that preserves changes users made in the old tode structure
  • tag 1.0.0 before merge ... next release 2.0.0
  • script for building /sys structure for exsiting stones

nginx FastCGI support

Should write documentation and hook in pre-defined configuration files for nginx FastCGI support:

  • Ubuntu 12.04 install instructions
  • nginx install instructions
  • nginx configuration artifacts

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.