I have run into an issue while going through the process of getting Updating to work.
The update method used is to do an uninstall and then install.
My problem is as follows:
I have several custom actions which rely on files in the Temp folder, and these all run perfectly well on a clean install.
When it comes to updating however, the custom actions fail, as it seems the Temp files have been removed as part of the AI_RemoveAllTempFiles action
This action seems to be getting done after install initialize and after install finalize.
Is there a way to turn off the removal of temp files on updating, or should I just remove the AI_RemoveAllTempFiles action that is being done at install initialize?
I have attempted to use the OLDPRODUCTS property to try and stop the AI_RemoveAllTempFiles action but it doesn't seem to have worked. By this I mean I have modified the InstallExecuteSequence table to have a condition of OLDPRODUCTS ="" for AI_RemoveAllTempFiles entry
What I suspect that happens is that the old version of your application removes the temporary files, not the new one. i.e. it does this when its uninstall is triggered by the standard action RemoveExistingProducts from the new package. You can see this in a verbose log easily.
To avoid this problems during updates, you should have the temporary files added in a subfolder from Temporary folder. This subfolder should have a unique name for each version, for example you can set it to be [|ProductCode].
In your custom actions, to make sure you always get the correct path of the temporary files use their corespondent properties, i.e. each temporary file has associated a unique property, visible in the dialog appearing when you double click the file in Files and Folders page, this property resolves to the full path of the file.
Related
In my new SSIS package I have tried using both File System task and Script task to move a file to child ("DONE") folder once the file has been processed and I get an error saying "Could not find part of the path" I set the path to variable 100% the path exists so what I am doing wrong.
The file is being processed by a batchfile that loads the file thru a 3rd party system into an SQL server database. If the file was locked it would surely say locking error and the 3rd party system would not show successful import.
I just fiddled around with my package tried to run it locally but disabled the batch call, (this was running the script so one line call File.Move (Source, Destination) where I changed the destination to not include the filename so the path only) and initially it was circling in an infinite loop. So I stopped it and ran a few more times and every time post the first run it was throwing a Target of Invocation error whatever that is. Then I changed it back to File System Task and now it worked locally. I deployed to the server it worked also. I reenabled the batch call redeployed and it worked on the server go figure. So I have no idea what I really did for it not to work. Moral of the story step away and come back don't trust yourself and reconfigure.
Now that I can put it down to mostly likely a human error or maybe a bug in SSIS that you do something else as in reconfigure it now starts to work or was it simply removing the filename from the destination path works for File System task only I will never know but I will probably delete this post as I don't think it adds anything useful.
short
I got an error:
No such file or directory
But this is intentional. Is there a way to ignore this error? Or can I remove files from my copy bundle resources programmatically?
Background
I have an app for different providers. Every provider has different configs and get some different json-files. For example Provider1 has file1.json, file2.json, Provider2 has file1.json,file3.json, Provider3 has only file2.json and so on.
For every app upload the json-files can change (it's a settings thing). Now in my basic project I have references to every possible json-files. This files are filled with test data.
The work around is like this and full automatic:
Get individual json files for provider -> merge founded json files in my basic project and override existing jsons with test data -> start app upload with fastlane
Usually I uncomment all test data before I upload a new version. So every possible reference is okay in XCode.
Now I forgot to uncomment things and a provider receive wrong files with my test data.
To solve that problem I set a git ignore. So in my project are only the jsons files that the provider needs. But the references from my project file are still existing. So I understand why the error appears.
How can I solve that problem smart?
I solve the problem... it's dirty but it works.
In the merging process I clean my data by shell before the provider data override some of them:
cd goToPathWhereFilesAre
echo "" > file1.json
echo "" > file2.json
So my references are always correct and the content is empty, either the provider data are override them.
EDIT and thanks #Anton Tropashko for the cleaner way
cd goToPathWhereFilesAre
touch file1.json
touch file2.json
You should create a target for each provider. And set each file (config/json) with the proper targets...
Don't you ever work manually on differentiating versions!!! Good luck
This is part of an ongoing project... splitting out domain objects so they can be consumed by multiple applications. The database migration files for the domain objects live with the plugin... but we want the apps to be able to reference them during a dbm-update.
I can get the application to recognize the plugin changelog, but after that, the changelog does not perform includes and process them as I expect.
Using GrailsPluginUtils I am able to get the path of the plugin and the plugin changelog, with which I do an include file. If I put the changeSet right in that file I am good, it runs. If I move it to a separate file in the same folder, or in a sub-folder, and reference it via "./someFile.groovy" it seems to FIND it but does not process it. I say it seems to find it because if I do NOT use a relative file path, the migration process throws an error saying it cannot find the file e.g., "someFile.groovy"...
I have workarounds but they are not acceptable because we want to control the order of how the DB migrations occur by using sub-directors with a _changelog.groovy that then includes the actual transformations (changeSets). But they are not being "include"ed.
If I use includeAll, it will grab any and all scripts in that one folder, but again, does not process any other includes referenced therein. I can write a script to scan the folders recursively but again, that requires a lot of coding to parse the _changelogs and grab the appropriate inclusion order, etc.
I really just want "include file:" to work as it does in a given application for its own changelog files.
Has anyone else done this? Am I missing something terribly obvious?
In the app...
databaseChangeLog {
...
include file: "${GrailsPluginUtils.pluginInfos.find { it.name == 'my-plugin' }.pluginDir}/grails-app/migrations/my_plugin_changes"
}
... in the plugin...
databaseChangeLog {
include file: "./someChangeLogChangeSet.groovy"
}
Thank you...
We had also tried adding changelog files to the plugin where our domains live but were unable to access it from the main app. However, if you want to access your files from other location then you could specify this property in your config file and give the folder name here Or even copy all the migrations to the appropriate location to the main app.
grails.plugin.databasemigration.changelogLocation = 'migrations'
If you do find a actual solution to this, please post it.
I am creating web application in C# using ASP.NET MVC and I am using MSSQL server installed on my machine.
Also I wanted to publish application as open source project, and run it on production server.
Should I add web.config file to source code repository? If i should, how I should track "open source version" (pointing on MsSQL installed on localhost) and production version (pointing on my hosting of web.config (I am using Mercurial).
The recommended way to do this is as follows:
Create a copy of the public version of the file you'd like people to use as a starting point, and name it something other than the actual usable file. In your case, it could be web.config.template. Make sure the file would be usable if you just renamed it.
Instruct Mercurial to ignore the actual file, ie. web.config
If possible, make the build process figure out if the actual file is present, and if not, make a copy from the template file into the actual file
If step 3 is not possible, a batch file to make the actual file is the next best thing, or simple instructions on how to make it.
This ensures that:
There is a simple way of getting the actual configuration file
You can edit your local actual configuration file without worrying about committing it (it is ignored)
If step 3 was possible, this is largely transparent unless you need to make modifications to the file
Step 3 can be handled with a pre-build event for your project, something like:
if not exist web.config copy web.config.template web.config
You could commit a generic version to your repository, probably on the initial load only (so that the project will build for those who don't know how to create their own), and then add an ignore rule later so that you can add your connection strings and whatnot.
Does anybody know how to (easily) "rename" an existing grails application? I'm running into this because my PaaS provider does not allow me to delete a subscription... So I want to deploy my application under a different name.
Of course, I can do this manually, but I think it might be a useful 'top-level' script (i.e. "grails rename-app newappname")
Manual hints:
When I do a "grails create-app myappname" I can see the myappname exists in the following files (and filenames)... Of course this is done by the create-app script, which replaces #...# tokens in the template. I guess once they are replaced, it's not trivial to do a rename.
./.project: <name>myappname</name>
./application.properties:app.name=myappname
./build.xml:<project xmlns:ivy="antlib:org.apache.ivy.ant" name="myappname" default="test">
./ivy.xml: <info organisation="org.example" module="myappname"/>
./myappname-test.launch:<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="myappname"/>
./myappname.launch:<listEntry value="/myappname"/>
./myappname.launch:<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER" javaProject="myappname" path="1" type="4"/> "/>
./myappname.launch:<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="myappname"/>
./myappname.launch:<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dbase.dir="${project_loc:myappname}" -Dserver.port=8080 -Dgrails.env=development"/>
./myappname.tmproj: <string>myappname.launch</string>
And of course... the top-level directory name is "myappname"
Any hints, or information about ongoing initiatives in this area are welcome
Greetz,
Johan
I had to do this, I renamed my project top level directory to the new name and
edited the application.properties file. There is a line app.name=youroldappname which should be changed.
Actually, you do not even have to rename the directory. You could have a different web-app name.
Hmm, I know it doesn't look fun, but it shouldn't be difficult (just boring) to rename the project directory, then all the files with your project name in them (you can ignore .tmproj unless you use TextMate). Finally, a quick search through all the files for your old project name to replace and you should have it.
Oh! First, if you're using an IDE, you'll want to remove the project from the IDE, then re-import it once you've completed your renaming procedure.
As far as I know, nothing project-specific is stored anywhere except the project directory and below, so it's a very finite set to search, and you only have to do this once (I hope).
Not very elegant, I know, but brute force does have its uses.
I used the brute force Method and it worked for me. Took 5-10 minutes to find all files with the name in it and replace it with the new one. Also Netbeans was ok afterwards. The only thing that changed was the port number which I had to change again.
Just renaming works except when you are using plugins. They will be stored in the $USER_HOME/.grails/$GRAILS_VERSION/projects/OLDNAME folder.
So after renaming your project you "lost" your plugins. I haven't tried renaming the plugin's folder however just installing all your plugin works as well (at least with Google App Engine and gorm-jpa).
If only changing the web app name isn't enough you can try the rough way - make a backup before.
(In workspace folder)
zip -r oldname.zip oldname/
Then, in eclipse/ggts, use
Disable project, Build automatically
Search, File, Containing text : "oldname", Search
Right click on search results, Replace all, ... "newname"
Exit eclipse and rename all folders to the new project name. On Unix/Mac run
find . -name "oldname"
and mv the handful of results to properly reflect the new names.
For me it worked like a charm, but make sure your project name is not a keyword and reasonably unique.