I don't know how objective I can be about this, but I'll give you my 2
cents. I'll just comment about the parts I know something about.
Hi! I have an idea for a project that would be based around a
community like website. I am currently trying to evaluate different
tools for me to build my site with. Though I'm fairly new to
developing server side things, I do have some programming experience
and a lot of gerenal computer/web know-how, so I know roughly what I'm
heading for. I want something that is proven to work for semi-big
community sites, that is reasonably easy/quick for me to learn and
use, that I can thoroughly brand and theme the way I want, easy to
maintain and update for whatever future changes and additions I may
want to do to the site, and so on. The website has to be finished
early spring 2008, and I have fairly much time to devote to it.
It looks like you've looked at your resources and opportunity costs.
Good move.
I've been looking at Drupal, which seems nice because it looks like it
has a gentle learning curve which may make it more realistic for me to
actually finish the project alone. It's also good because most of what
I need appears to be available out of the box or through different
modules. What I don't like about Drupal though is that it feels like I
don't easily have any control over the actual mechanics of my site,
because of the layers of interface between me and the code.
Now I'm also looking at Ruby on Rails. It seems to offer a higher
level of control, meaning you're not forced to rely on the work of
others. Otoh, this might mean a lot of extra work for me?
One beautiful thing for people new to Rails is how much work you can
use from others, if you know how to guide the process. There are
plugins and gems for a lot of standard things. These get real easy to
implement and test.
Let's look at what I need for the website (I recently posted this list
(but slightly different) on the Drupal forum as well):
* A regular CMS for managing the website, including news articles
(essentially a blog) and articles of more static nature (such as FAQ's
etc)
* A good, clean, fast and easy-to-use forum that doesn't feel bloated
(a good example of what I want would be Vanilla)
* The ability for users to start their own "teams". Each team
automatically gets its own private/hidden forum section as well as a
public group blog. A user must not be part of more than one team at
the same time. Anyone can apply to be part of any team, but the
initiator of each team decides who is allowed and who is not. There
must be a maximum limit of say 15 members in each team.
* A public gallery with support for at least images, text and movies
(streaming, preferably a flash application). Every uploaded submission
must be manually approved by a moderator before it appears on the
website. Support for rating, comments, sorting, albums etc would be
welcome but not absolutely necessary.
* A natural connection between news articles and the forum, similar to
how you can discuss blog articles, but in the forum instead. So, when
a news article is published, it automatically creates a new discussion
in the forum. Another variant would be to have a certain forum section
in which only some people are allowed to post, and where a new post
automatically shows up as an article on the news site.
* Super easy sign up but still good spam protection
* Google maps integration, with icons showing how the members of each
team are spread out over the country
Would it be unreasonable for me to use Rails for this?
I don't see any reason why you couldn't build all of that with Rails
and be able to scale it and meet all of your requirements. As far as
I understand your requirements, I've seen or built something like each
piece you have listed with Rails. Besides, Rails is simply a
framework. If you really came up with something that didn't fit the
MVC paradigm, what's to stop you from writing that part in plain Ruby,
or even something else?
What other tools would you recommend that I take a look at?
I think, more than whether to use Rails is HOW you'd use Rails. I can
speak for myself, and it seems to be common in the community, that
we're learning Rails the "wrong" way. We get excited and do a
tutorial or two. Then we write a few sandbox applications to take the
thing out for a spin. Then, we just kind of hack away, pick up books
or articles to try and fill in the gap. Now, 2 years into it, I'm
starting to get a different picture. I wasted a lot of time in
undirected learning.
Here's what I'd propose you do:
* start with a good foundation in test-driven development (or BDD).
Use that approach to explore Rails and Ruby. It seemed to pedestrian
to me before, so I avoided this approach, but then I realized how vast
the Rails world is and how quickly I could get lost, and I just think
that the test-driven work I do today is much cleaner and easier to
build off of than my original work. (I use RSpec for my test/specs by
the way. I'd recommend those). Here's a decent article defending
this approach to learning rails:
http://notrocketsurgery.com/articles/2007/02/23/the-scientific-method-learning-bdd-rspec-ruby-and-rails-with-language-experiements
* Approach your project interface-first. That way, if you decide
you'd prefer a different framework, it's because of a design decision,
and you haven't thrown away a lot of your work. It's a good practice
anyway, even if you're not wondering whether to use Rails.
* See how many elements of active learning you can use (short lectures/
articles/chapters, reflective questioning, practical experiments, and
peer feedback)
I think if you approached Rails this way, the learning curve wouldn't
seem so unnavigable and you'd probably enjoy the trip a lot more.
Also, you might discover some of the things that I've discovered about
Rails:
* It's a joy to write in Ruby
* The beginning of a good app can start to take shape in minutes
* About as much of the mundane that can be done for me has been done
for me. In the areas where things still seem mundane, I'm discovering
that there were better practices that I hadn't been taking advantage
of (both things generic like wireframing and test-driven design as
well as more Rails-specific stuff that you'll pick up as you go along)
* The learning curve mostly represented the undisciplined parts of my
work process that I had to bring under control (like thinking in terms
of MVC, getting into a regular refactoring habit, and learning
something new every day)
* The community is a very good place to hang out. People are
thoughtful and considerate, often. What's more important, a lot of
them are very smart. Good group of people to associate with.
As far as the Google Maps part of your application, there's a whole
book put out on using Google Maps with Rails from Apress (Google Maps
Applications with Rails and Ajax). It's pretty good.
Good luck with things, whichever direction you end up going.
David Richards