Upgrading from Earlier Versions

Please Read

There is *no* automated upgrade from version 3.0 or earlier installations at this time. Until a specific updater is written you will need to discuss upgrade options on http://groups.google.com/group/farcry-beta

Backward Compatibility

For the 4.0 release we have tried very hard to maintain backward compatibility for applications built in earlier versions of FarCry. Nevertheless there have been several significant architectural changes that you will need to accommodate during the upgrade.

If your application doesn't deviate significantly from a standard FarCry solution there should only be a few structural changes required - mainly with respect to the relative location of FarCry framework files. Schema changes will be automated by an updater as per previous upgrades.

Known Issues

The following changes will impact your upgrade:

  • change of directory structure for core libraries and projects
  • project Application.cfm changes
  • addition of plugin architecture
  • change of schema for array tables
  • change of file path management for media assets

Directory Structure Changes

Project Changes

You will need to update your project Application.cfm to use the farcryinit tag.

The following files should be removed from your project:

  • ./config/_applicationInit.cf m
  • ./config/_dmSecUserDirectories.cfm

Note: if you had modifications to the default userdirectory for the security sub-system (ie. you have modified _dmSecUserDirectories) then you will need to transfer these changes into _serverSpecificVars.cfm

Plugin Architecture

For example, you will need to include farcrycms plugin for News, Events, Facts and Links.

Array Table Schema Changes

There is a beta updater under ./farcry/updates called b400.cfm that should update array tables. However, you may need to manually change the dmNavigation array tables in order to get there.

Media File Path Changes

The way in which files are uploaded and stored on the server has changed. This may impact your current media asset management.

Rough notes only...

- [ ] update ./www/Application.cfm
    - [ ] remove old junk
    - [ ] put in farcryinit tag with relevant values
    - [ ] <cfimport taglib="/farcry/farcry_core/tags/farcry/"
          prefix="farcry" />
          <farcry:farcryInit name="demo40" dbType="mysql"
          lFarcryLib="farcryflow" />
- [ ] update ./config/_serverspecificvars.cfm
    - [ ] remove defunct variables
- [ ] delete ./config/_applicationInit.cfm
    - [ ] (taken care of by farcryinit tag)
- [ ] delete ./config/_dmSecUserDirectories.cfm
    - [ ] if you have mods here you may need to transfer these to
- [ ] update array property tables
    - [ ] note: can't reach updater without manually modifying
          dmnavigation array properties manually
    - [ ] run updater (currently called p310)
    - [ ] updater appears to throw in some random folders for image
          paths into the /farcry mapping folder (this is not good --
          just delete the folders)
- [ ] COAPI changes
    - [ ] deploy all COAPI type changes as required
        - [ ] a lot of db repairs likely
        - [ ] MSSQL: numerics and text changes will fail (ignore)
    - [ ] deploy all COAPI rule changes as required
- [ ] Code Changes
    - [ ] array property faults
        - [ ] check for all direct references to array property tables
              (ie. those that bypass fourq)
        - [ ] requires a change from objectid to parentid in most cases

More Rough Notes on Upgrading

I've just used Michael's notes (see comments section below) - here are some updated notes based on my experience.
Misc. Details of my reference project (called "corporate")
1.    MSSQL database
2.    Active Directory for authentication
    a.    My site contains modifications to security logic. (packages/security).

Install core and migrate key project files

4.    Unzip farcry-milestone-4-0-9.zip to: C:\Inetpub\wwwroot\farcry\
    a.    Result:  C:\ Inetpub \wwwroot\farcry\(core, plugins, projects)

5.    Make a copy of C:\Inetpub\wwwroot\farcry\projects\mollio  in the same location
    a.    Rename "mollio copy" to "corporate"
    b.     Result: C:\ Inetpub \ wwwroot \farcry\projects\corporate\

6.    Copy files from V3:
    a.    [OldProject]\webskin  to [NewProject]\webskin
    b.    [OldProject]\www  to [NewProject]\www
    c.    [OldProject]\packages\security to [NewProject]\packages\security
        i.    (only if you've got security packages)
    d.    Change all instances of "/farcry/farcry_core/" to "/farcry/core/"
    e.    Changes all instances of "/farcry/fourq/" to "/farcry/core/packages/fourq/"

7.    Amend [NewProject]\www\Application.cfm
    a.    Remove references to /config/_ApplicationInit.cfm, replace with:
        <cfimport taglib="/farcry/farcry_core/tags/farcry/"
                  prefix="farcry" />
        <farcry:farcryInit name="corporate" dsn="corporate" dbType="MSSQL"
                  lFarcryLib="farcryflow" />
        i.   *Note:*  I found the "dsn" attribute just didn't work, so ensure the site name and datasource name match.

8. Set up a new website, pointing at your new copy of the project. (root dir: [NewProject]\www)

9. Ensure website properly linked to CF

10.    Coldfusion Mappings:
    a.    "/" = C:\Inetpub\wwwroot\farcry\projects\corporate\www  
    b.    "/farcry" = c:\inetpub\wwwroot\farcry

11.    Enable Coldfusion debugging, it'll probably come in handy.

Apply the Update

12.    Launch Farcry updater at http://intranet4.XXXX.com.au/farcry/updates/
    a.    Use local farcry login rather than AD (check dmUsers table, mine was u:farcry/p:farcry)
        i.    (This may also work, I haven't tried it: "If you can not reach the updater comment out lines 39 \-51 in /Admin/Application.cfm "which checks to see if the person has general admin permissions". Be sure uncomment this when done\!")

13.    Apply update for b400, click Deploy
14.    Return to /farcry/updates
15.    Apply update for b401, click Deploy
    a.    You may be able to deploy both at once, I haven't tried it.

Apply your modifications / Deploy Types (this section i'm not sure about - in progress)
1.    Copy everything from [OldProject]\customadmin\ to [NewProject]\customadmin
2.    Copy everything from [OldProject]\packages\ to [NewProject]\packages
    a.    Rules
    b.    Types
    c.    System
    d.    Change all instances of "/farcry/farcry_core/" to "/farcry/core/"
    e.    Change all instances of "/farcry/fourq/" to "/farcry/core/packages/fourq/"
    f.     Change all instances of "farcry.farcry_core" to "farcry.core"

3.    Log in to Admin (http://intranet4.XXXX.com.au/farcry)
4.    Go to Admin > COAPI > Type Classes and deploy / repair as necessary.
a.    Turning off CF debugging will make this quicker.

5.    Go to Admin > COAPI > Rule Classes and deploy / repair as necessary.