Al Nyveldt

Adventures in Code and Other Stories

Train tracks Well, a while back, I promised to release a method for helping people move their BlogEngine data from XML to a database or the other way around.  I gotten a lot of requests for this code, but I’ve been plenty busy with other things so it has just sat here until last week.  I cleaned up my code and I was surprised to see how little of it was left.  Anyway, I’m testing it now on my data, but I’d like to find a few more testers before I make it more widely available.

The method I use actually will move your blog data from any current BlogEngine BlogProvider data to another.  So you could potentially transfer from SQL Server to SQLite or from MySQL to XML as well as XML to some database.  It will leave your original data source intact of course, so the migration is actually a fine way to make a backup of your blog data as well.  The tool however is only for 1.4.5 users.

Anyway, if you are interested in giving this a try, leave me a comment below or send me an email.  Let me know what migration you are interested in testing (how your data currently is stored and what you want to convert to) in your message. I’ll pick a few testers, leaning toward those methods I want to see tested the most, and contact them with instructions in the next day or so.

Remember testers do not have to move to the new data source, it will just be making a copy.  You can chose to use that copy later, just delete it, or ignore it.  I just would like a few people willing to test and to get back to me with their results and feedback within 2 days of receiving it.  The process should take under 15 minutes.  (My blog takes under 3 minutes from setup to completion.)

If all goes well, I’ll get some feedback from the testers quickly and have the process available by the end of the week.

tools With a new release now available, I wanted to write up another guide for those looking to upgrade their blog.  The basic upgrade process is as always fairly simple, but I’m going to branch out and cover more special circumstances.  The guide might seem a bit long, but you aren’t likely to be concerned with all the steps. 

1. Backup

If you’ve read my guides before, you know I’m a big fan of the backup.  If you back it all up and something goes horribly wrong for you, you can just pop in back in place and start again.

I should note that I when I upgraded my blog to 1.4.5, I skipped most of this step.  I backed up my data and my themes and extensions.  Then, I just went for it and I felt bad knowing that I was going to tell everyone to back it all up.  So I’m confessing now as part of my guide that I skipped this.  I do however wish that I had a full backup.  (Not that I lost anything, but it would make for a great screencast to show you exactly how I upgraded my live blog.)

2. Download BlogEngine 1.4.5 (web)

If you haven’t already, now is the time to download the BlogEngine.NET software.  I recommend the web version as it is all ready to go.  Get it here if you don’t already have it.

Now that you have it, unzip it and remove the ready only check in the properties (apply to all subfolders and files).

3. Update your data and configuration

If you use the default XML data storage, you have nothing to do here as usual.  If you are unsure, you likely fall in this category.  Take a moment of silence for your database brethren and move on.

If you are using a database, then you have a little work to do.  In the Setup folder, there are 4 folders, MySQL, SQLite, SQLServer, and VistaDB.  If you are using on of these databases, open the folder, read the readme.txt file and follow the instructions.  There is an upgrade script and a sample web.config.

The web.config has changed since 1.4 and I would recommend you use the version included in the setup folder.  If you are using MySQL or SQLServer, you’ll need to move your connection string over as well. 

If you were using SQLMembershipProvider and SQLRoleProvider, you’ll need to configure these in your web.config.  To make things easier, we have made the dbMembershipProvider and dbRoleProvider, the default database options in our sample web.config.  I personally think the SQL versions are better options, but this is the easiest option for people to get setup and since the other database configs use them, it keeps things simple.

4. Update your web server

Now, we are ready start moving files to your web server.  You do have a backup you can be proud of from step #1 don’t you? If so, you can begin to copy your new files out to your web server.  It is always safest to remove all the folders and files you don’t want to keep before the copy.  For me, these means that I keep my app_data folder and remove everything else before I start my copy.  (I put my theme and extensions back at the end from my backup.)  This way you are sure you have removed all of the previous version.

Anyway, uploading your site will be the longest step of the process.  Be patient.

5. Security Thoughts.

If you are upgrading from BlogEngine.NET 1.4 and have converted to hashed passwords, you can skip this section, you’ve already dealt with it.  If you are using BlogEngine.NET 1.3.1 or earlier, pay attention.  We’ve upgrading the XMLMembership provider security to used hashed passwords by default.  This means if you are using the default security model, you’ll need to need to make some changes.  If you were using the SQLMembership provider, you can skip this as well.

If you fall into the category of people who need to make some changes you have 2 choices.  The recommended choice is to convert to hashed passwords.  To do this, you simply open your users.xml file (found in your app_data folder) and remove the passwords for each users.  (Don’t delete the whole password line, just the password, so that the it shows no password.)  Clearing out the password will allow you to use the password “admin” when logging in.  You should then use the Change Password option to change the password to a better password.  The new password will be hashed.

xmlpassword

Your other option is simply to continue to use clear text for your passwords.  To do this, open your web.config and find the Membership provider section.  You can change the passwordFormat from Hashed to Clear.  This option is not as secure and will require you to make this change with each upgrade of BlogEngine.NET in the future.

6. Themes and extensions

If you are using a custom theme by default, you will need to put this back in place before you try to browse out to your site.  If you are using special widgets or controls in that theme that depend on widgets, they will need to be back in place too.  The downside of putting them all in place before trying out the upgrade is they potentially could cause you issues.

Make a note of what files you are putting out on the web server in case you have issues.  If issues arise, you can simply remove these files and manually change your theme to “Standard” to test the BlogEngine setup.

7. Open your site in the browser

It will take a few moments for your site to come up the first time around.  If everything went well, you should see your blog as you remember it.  If you have an error or display issue, see the troubleshooting section below.

If you just did the security upgrade in step #5, log in right away and get those passwords changed from “admin” to something else.

8. Clean up

If you didn’t copy all your extensions out in step #6, now is the time to do so.  Copy them out, and refresh your browser.  It will recompile so don’t be shocked by the delay.

Now is a good time to check over your settings and make sure everything is coming up as you expect. 

Congratulations.  You are upgraded.

Troubleshooting

Don’t panic.

There are plenty of things that could be causing you minor issues that can quickly be corrected.  Here is a bullet list of things of things to check first.

Compile errors

  • If you are using a custom theme, widgets, or extensions, remove them, set your default theme to Standard, and try again.  You can change the theme in your settings.xml file or be_Settings table depending on your setup, xml or database.
  • If you are using MySQL, be sure to add the system.data section to your web.config.  (You can get this from your original web.config or from this post on the forums.)
  • Did you really clean out all the files (except app_data) or did you just overwrite them?  Did something get left over that is causing a problem?  Or did your FTP program miss some files?
  • Did you customize your web.config?  Try the one included in the download.  Using your old web.config will get you a nasty looking error.
  • If you are using MySQL or SQL Server, please check your connection string. 

Security errors

  • Can’t login?  Try clearing out your password as described in step #5.  If that doesn’t help, try using the downloaded users.xml file and logging in as admin.
  • An application restart might help out if you are really locked up.
  • If you are using a database and the default dbMembershipProvider, you can clear your password in the be_Users table and try logging in as admin.
  • Were you using the SQLMembershipProvider and did you configure it properly?  It is not a default setup.

Display errors

  • It has been reported that there have been some minor styling changes from 1.3.1 to 1.4.x.  Custom themes may require some minor css updates to get them working.  (I’m not sure what tags have changed as I didn’t have any issues with my custom theme in 1.4 or 1.4.5.)
  • If you have an empty widget bar, you will need to re-add you widgets.
  • If you just added the Administration widget and it shows up blank, refresh your browser and the options should show up.

Beyond these basics, I’d strongly recommend looking on the BlogEngine.NET forums and asking a question if you don’t see your answer after searching.  Please provide as much detail as possible in your forum post.  The forums are the best way to get help if you are having trouble.

Earlier today, the BlogEngine.NET team published the latest version of BlogEngine.NET, version 1.4.5.  It is a minor release compared to our previous releases, but an important one.

benlogo80 BlogEngine.NET 1.4 came out only a month ago, but we have a few fixes we wanted to get out to the world as soon as we could to make BlogEngine life better for everyone.  We have a few bugs that were hindering new people getting started as well as medium trust issues at certain hosting providers.  In addition, there are a bunch of other bug fixes in this release along with a few goodies to entice you to upgrade even if you are happily working along in 1.4.0.

The latest version has put all the database support I’ve been making available here right in the download now, so you can quickly and easily get your instructions and scripts for SQL Server, MySQL, SQLite, and VistaDB.  In the case of VistaDB and SQLite, we actually have initial database files to start with instead of installation scripts.  All upgrade scripts are included in the setup folder as well.

We have added more features into our Metaweblog API support.  We now support choosing the author by drop down if you are connected as an administrator.  The Live Writer dropdown list will show you all available users you may post for.  In addition, we have also made it easy to enforce SSL for your Metaweblog connection.  If you have it, you may as well, take advantage of it.

There is some cool new APML features along with a few other things to make your blog experience better.  Between the fixes, performance improvements, and new features, you can’t go wrong.

I’ll be working up an upgrade guide and should have it posted in the next 24 hours.

You can download the new version here.

SQLite After a few requests, I decided to go back and do another data provider for BlogEngine.NET.  This time around I’m using SQLite.  SQLite is a file based format very similar to VistaDB Express and it has no restrictions .  It is another fine option for blog data and very easy to work with.

Once again, this is a complete provider setup.  It will store all your blog posts, pages, profiles, users, roles, and settings.  It could be partially implemented by making changes to the default providers in your web.config if you desire.

The process for getting setup is very easy.  The instructions are assuming you have BlogEngine.NET setup already.  If you don’t please check out the initial setup screen cast to walk you through the process.  If you already have an existing blog, be sure to backup before following these steps.

1. Download the SQLite database provider for BlogEngine and unzip it.

2. Download the SQLite ADO.NET Provider binaries.

3. In your SQLite ADO.NET download, find the System.Data.SQLite.DLL and add it to your blog’s bin folder.

4. From the BlogEngine download, copy the BlogEngine.s3db file to your blog’s App_Data folder.

5. Next, replace your blog’s web.config file with the new web.config file from the BlogEngine download.

6. Browse out to your blog and you should see the BlogEngine with SQLite welcome post. 

7. Your User security has been reset, so login as Admin (with the password, admin), add new users, and change your password.

That is it.  You should be now blogging with data stored in SQLite.

great detective If you are a BlogEngine user who prefers databases, you will see a bunch of new stuff when you download the latest version, 1.4.

For the un-initiated, BlogEngine.NET makes use of the provider model to handle its blog data storage.  By default, BlogEngine uses XML for data storage and the provider implementation is simply called the XMLBlogProvider.  Since version 1.0 however, BlogEngine.NET has allowed for SQL Server to be used as a backend as well.  The provider was called, the MSSQLBlogProvider.  By making some simple changes in your web.config, you could tell BlogEngine to use one method of storage or the other. 

Additionally, BlogEngine.NET has also historically made use of the Membership and Role providers and have used an XML implementation of these.  A user could always add the settings to use the SQL Server membership and roles providers if they wanted to.

In BlogEngine.NET 1.4, the old MSSQLBlogProvider is now gone and in its place there is a shiny new DbBlogProvider.  In addition, as you look down through the web.config, you’ll notice a DbMembershipProvider, DbRoleProvider, and DbProfileProvider.  We’ve also added in the SQLMembershipProvider and SQLRoleProvider to make it easier for people to use these as well if they wish.  None of these new providers are set as the default provider, but they are there and ready to be used by the right person.

DbBlogProvider

The DbBlogProvider is an upgrade for the MSSQLBlogProvider.  There are a few main differences however.  At a basic level, it simply has more calls as the base class, BlogProvider, has more calls and supports more items to be handled by the BlogProvider.  However, beyond the additional calls, it has been changed to work with DbProviderFactories.  Basically, this means that instead of creating connections, commands, and readers using the old familiar SQLConnection, SQLCommand, and SQLDataReader objects, it is now using the DbProviderFactory classes to create these.

A simplified explanation of the DbProviderFactory is that this factory class will be responsible for creating all the needed connections, commands, parameters, and readers.  The class is created using the provider listed in your web.config.

   1: <connectionStrings>
   2:     <clear/>
   3:     <add name="LocalSqlServer" connectionString="dummy"/>
   4:     <!-- Mono complains if LocalSqlServer isn't specified -->
   5:     <add name="BlogEngine" 
   6:          connectionString="Data Source=MySQLServer;User ID=user;Password=password;persist security info=False;initial catalog=BlogEngine;" 
   7:          providerName="System.Data.SqlClient"/>
   8:     <add name="BlogEngineVistaDB" 
   9:          connectionString="Data Source=|DataDirectory|\BlogEngine.vdb3;Open Mode=NonexclusiveReadWrite" 
  10:          providerName="VistaDB.NET20"/>
  11: </connectionStrings>

As you can see above, the providerName property in these connectionString items tell us what type of connection objects will need to be used.  The DbFactoryProvider class created with the appropriate providerName will make all the connection, command, parameter, and reader objects of the desired type.

Ok, now that we have a basic understanding of the DbProviderFactory, let’s look again at the DbBlogProvider.  The DbBlogProvider is configured with a connectionString.  (There are a few other options which I’ve added to the sample below and will discuss briefly later.)

   1: <BlogEngine>
   2:     <blogProvider defaultProvider="DbBlogProvider">
   3:         <providers>
   4:             <add name="XmlBlogProvider" 
   5:                  type="BlogEngine.Core.Providers.XmlBlogProvider, BlogEngine.Core"/>
   6:             <add name="DbBlogProvider" 
   7:                  type="BlogEngine.Core.Providers.DbBlogProvider, BlogEngine.Core" 
   8:                  connectionStringName="BlogEngine"
   9:                  tablePrefix="be_"
  10:                  parmPrefix="@" />
  11:         </providers>
  12:     </blogProvider>
  13: </BlogEngine>

In the above samples, you can see that DbBlogProvider is set to use the BlogEngine connectionString.  And the sample 1, you could see that the provider for the BlogEngine connectionString is System.Data.SqlClient.  The DbBlogProvider will make a DbProviderFactory that will make SqlClient conection, command, parameter, and data reader objects.

If you look back at the second sample, you’ll notice that the DbBlogProvider shown above has a few other options in it.  These are optional and not required by the DbBlogProvider.  (In truth, the connectionString isn’t required either as it will look for a connectionString named BlogEngine if it isn’t listed.)

The tablePrefix option is fulfilling a request that we have had from a number of users.  By default, the installation scripts will create all the BlogEngine tables that all start with “be_”.  If you want to rename your table and have them have a different or no prefix, you can do that and just tell BlogEngine in the provider options what tablePrefix to use.  If the option is not listed in your web.config, it will default to “be_”.

Secondly, we have a parmPrefix option.  All database calls made in BlogEngine.NET use parameters.  The databases I’m most familiar with use the @ sign on the front of parameters, but different databases use different characters for this.  If you wanted to use, MySql for example, you will want to change this option to use the “?” character as the parmPrefix.  Again, by default, BlogEngine will use the @ character if this option is not listed.

The DbBlogProvider is expecting certain tables and fields for storing data.  You can see the tables and fields by checking out the MSSQLSetup script in the Setup folder of your web site.  (The script works only on Microsoft SQL Server,but you can get an idea of what how the tables need to be set up by looking at it.)

DbMembershipProvider

The DbMembershipProvider is another new class with BlogEngine.NET 1.4.  It is a simple membership provider that uses the same DBProviderFactory setup that DBBlogProvider uses.  This way, you can set up a table in your database of choice and store this information there.  The DbMembershipProvider is not full featured, but works fine within BlogEngine.  Many databases already have Membership providers written for them, but it is nice to just have a simple built in BlogEngine version so you don’t need to worry about more dlls.

   1: <membership defaultProvider="DbMembershipProvider">
   2:     <providers>
   3:         <clear/>
   4:         <add name="DbMembershipProvider" 
   5:              type="BlogEngine.Core.Providers.DbMembershipProvider, BlogEngine.Core" 
   6:              passwordFormat="Hashed" 
   7:              connectionStringName="AlsVistaDB"
   8:              tablePrefix="be_"
   9:              parmPrefix="@" />
  10:     </providers>
  11: </membership>

The membership provider has the same connectionStringName, tablePrefix, and parmPrefix options as the DbBlogProvider.  The only new option is passwordFormat.  This option controls how the passwords are stored.  It can be set to Hashed or Clear.  It will default to Hashed if it is omitted.

The DbMembership Provider is look for a table called be_Users.  Here is the fields it uses:

UserID int
UserName string
Password string
LastLoginTime datetime
EmailAddress string

DbRoleProvider

The DbRoleProvider much like the DbMembershipProvider is a simple RoleProvider.  It is not full featured, but works fine within BlogEngine.  It uses the the same DbProviderFactory setup and the connectionStringName, tabelPrefix, and parmPrefix options.

It uses two tables.  The first is called be_Roles.  It has 2 fields.

RoleID int
Role string

The other table is called, be_UserRoles.  Here are the fields it uses:

UserID int
RoleID int

DbProfileProvider

Lastly, we have the DbProfileProvider.  Again, this is just like the others.  It uses the DbProviderFactory and the same 3 options, connectionStringName, tabelPrefix, and parmPrefix.  It has 1 table it uses called be_Profiles.

UserName string
SettingName string
SettingValue string

Anyway, that should should cover anything and everything you might want to know about these new providers in BlogEngine.NET 1.4.

About

BioPic Hi. My name is Al Nyveldt and I'm a software developer from central Pennsylvania, USA.

I'm on the BlogEngine.NET development team and write on a variety of development related topics. More...

Follow me on Twitter
Contact me via email

Recent Comments

Quote of the Day

"And remember, no matter where you go, there you are."

- Earl Mac Rauch

Sponsor


Recommended Books



Archives


Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2008

Sign in