Fork me on GitHub

Archive for March, 2008

Memcache issue with Mack 0.2.0

Friday, March 14th, 2008

If you get this error:

no such file to load -- memcache

The problem is mack-0.2.0 uses the cachetastic-1.3.1 gem, which has an errant require in the memcache adapter. There will be a patch forthcoming for Mack to use the lastest version of cachetastic which solves this issue.

Until that patch is out, the easiest thing to do is install the memcache-client gem, like such:

$ sudo gem install memcache-client

Mack featured on the RailsEnvy.com podcast

Thursday, March 13th, 2008

Well, um… the title of the post really says it all. Mack is briefly discussed about 3/4 of the way in.

Here’s the podcast: http://railsenvy.com/assets/2008/3/12/Podcast_22.mp3

Make sure to checkout their other podcasts, RailsEnvy.com Those guys do a great job, and their quite funny to listen to as well.

Other Mack Sitings:

http://www.nomedojogo.com/2008/03/13/rails-podcast-brasil-episodio-9/ – This appears to be the RailsEnvy podcast in Portuguese, but since I don’t speak Portuguese, so I can’t really say.

http://blog.libinpan.com/2008/03/13/links-for-2008-03-13/

Release 0.2.0

Tuesday, March 11th, 2008

A couple of really cool features in this release. In controllers and views you can  now call:

render(:url=> "http://www.mycoolurl.com")

Developers can now also develop their own custom rendering systems, without monkey patching the core:

class Mack::Rendering::Pdf < Mack::Rendering::Base
  def render
    # do work to render stuff as a PDF
  end
end

Now add this to the list of available render systems:

app_config.mack.rendering_systems << :pdf

You should now be able to do this in your controller:

class MyAwesomeController < Mack::Controller::Base
  def pdf
    render(:pdf => "my_pdf_template")
  end
end

Install:

$ sudo gem install mack

Changelog:

  • ticket: 3 Render url in Controllers/Views
  • ticket: 5 Render Extension System.

Trac now online

Wednesday, March 5th, 2008

There is now a Trac system set up to help deal with bug/feature tickets, wiki, roadmap, etc… You can find it at http://trac.mackframework.com.

While you’re there you can browse the new SVN repository, see what code is in the pipelines, etc…

It’s all very exciting, in a really geeky sort of way.

0.1.0: The Obligatory ‘Blog’ Demo

Tuesday, March 4th, 2008

Ok, because every good framework should tell you how to create a blog, why should Mack be any different? Let’s start off with the basics. Is Mack installed? If not, here’s how:

$ sudo gem install mack

Great! Before we move on, make sure that the gem you installed is at LEAST version 0.1.0, otherwise, you’re not going to get very far in this tutorial. Now, let’s move on. Now let’s generate our kick ass new blog, and since we’re going to need some sort of database support for our blog, we’ll configure it to use DataMapper. If you don’t have DataMapper installed, please head over to http://datamapper.org to find out how to install it. Mack has support for ActiveRecord as well, but it’s just easier to get DataMapper going because you don’t have to deal with migrations.

$ mack my_kick_ass_blog -o data_mapper
$ cd my_kick_ass_blog

That should’ve created a whole bunch of files and folders for your blog. Now let’s generate some scaffold code for our blog:

$ rake generate:scaffold name=posts

That should’ve created even more files for you. One of those files is app/models/post.rb, let’s open that up, so we can edit it for DataMapper.

Edit the file so it looks something like this:

class Post < DataMapper::Base
  property :title, :string
  property :email, :string
  property :body, :text
  property :created_at, :datetime
  property :updated_at, :datetime

  validates_presence_of :title
  validates_presence_of :body
  validates_presence_of :email
end

Now, I’m not going to go into detail as to what that’s doing, that’s for the guys at DataMapper to explain. Before we move on to the next step, you’ll probably want to crack open config/database.yml and edit it so it the paths to your database are correct, you’ll probably also want to go to your database system and make sure that the database name you configured in your config/database.yml is created, otherwise this will be a very short trip. I’ll wait while you do that. Finished, great! Let’s move on.

We need to now open a Mack console so we can create the tables needed for our blog.

$ rake console
$ Post.table.create!
$ exit

Ok, we should now have a posts table in our new database. Isn’t life wonderful? We’re so close to showing the world how wonderful we are as developers.

Now let’s edit our views, so they look something like this:

app/views/posts/index.html.erb:

<h1>Listing posts</h1>

<table>
  <tr>
    <th>Title</th>
    <th>Body</th>
    <th>Email</th>
  </tr>

<% for post in @posts %>
  <tr>
    <td><%=post.title %></td>
    <td><%=post.body %></td>
    <td><%=post.email %></td>
    <td><%= link_to("Show", posts_show_url(:id => post.id)) %></td>
    <td><%= link_to("Edit", posts_edit_url(:id => post.id)) %></td>
    <td><%= link_to("Delete", posts_delete_url(:id => post.id), :method => :delete, :confirm => "Are you sure?") %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to("New Post", posts_new_url) %>

app/views/posts/edit.html.erb:

<h1>Edit post</h1>

<%= error_messages_for :post %>

<form action="<%= posts_update_url(:id => @post.id) %>" class="edit_post" id="edit_post" method="post">
  <input type="hidden" name="_method" value="put">
  <p>
    <b>Title</b><br />
    <input id="post_title" name="post[title]" size="30" type="text" value="<%= @post.title %>" />
  </p>

  <p>
    <b>Body</b><br />
    <textarea id="post_body" name="post[body]"><%= @post.body %></textarea>
  </p>

  <p>
    <b>Email</b><br />
    <input id="post_email" name="post[email]" size="30" type="text" value="<%= @post.email %>" />
  </p>

  <p>
    <input id="post_submit" name="commit" type="submit" value="Create" />
  </p>
</form>

<%= link_to("Back", posts_index_url) %>

app/views/posts/show.html.erb:

<p>
  <b>Title:</b>
  <%= @post.title %>
</p>

<p>
  <b>Body:</b>
  <%= @post.body %>
</p>

<p>
  <b>Email:</b>
  <%= @post.email %>
</p>

<p>
  <b>Created at:</b>
  <%= @post.created_at %>
</p>

<p>
  <b>Updated at:</b>
  <%= @post.updated_at %>
</p>

<%= link_to("Edit", posts_edit_url(:id => @post.id)) %> |
<%= link_to("Back", posts_index_url) %>

app/views/posts/new.html.erb:

<h1>New post</h1>

<%= error_messages_for :post %>

<form action="<%= posts_create_url %>" class="new_post" id="new_post" method="post">
  <p>
    <b>Title</b><br />
    <input id="post_title" name="post[title]" size="30" type="text" value="<%= @post.title %>" />
  </p>

  <p>
    <b>Body</b><br />
    <textarea id="post_body" name="post[body]"><%= @post.body %></textarea>
  </p>

  <p>
    <b>Email</b><br />
    <input id="post_email" name="post[email]" size="30" type="text" value="<%= @post.email %>" />
  </p>

  <p>
    <input id="post_submit" name="commit" type="submit" value="Create" />
  </p>
</form>

<%= link_to("Back", posts_index_url) %>

Ok, so now we’ve created our forms, and setup our index page. Let’s actually go to the site and see it all works!

First we need to start the server:

$ rake server

Now let’s head on over to http://localhost:3000/posts and see what we’ve got. You should see a page that looks something like this:

Blog Demo 1

Now let’s click on that ‘New Post’ link and fill out the form:

Blog Demo 2

Now, let’s hit that wonderful ‘Create’ button and see what happens!

Blog Demo 3

Congrats! You just created your first blog post! Now let’s head back to http://localhost:3000/posts and see what we’ve got.

Blog Demo 4

Wonderful! Now all that’s left to do is to set our home page to our posts index page. Let’s open up our config/routes.rb and edit the following line:

r.home_page "/", :controller => :default, :action => :index

so that it’s now:

r.home_page "/", :controller => :posts, :action => :index

Now all you have to do is to restart your server and Bob’s your uncle when you hit http://localhost:3000 again you should your fantastic posts index page.

This concludes our brief introductory tutorial on getting going on Mack. Obviously Mack does a lot more, and I highly encourage you to read the RDoc to find out more about what it can do.

Enjoy.