I don't think rails is a fair example. Rails loves its runtime metaprogramming and that is not where crystal offers much, but I don't think it invalidates the overall similarity. There's trivial (scripts with simple flow), non-trivial (libraries with heavy oop design and a little bit of trickery), and there's almost everything else before we get to rails itself.
Just like in C, you have trivial, nontrivial, complex apps, then there's still a long way before production OS kernels at the extreme.
Many advanced libraries don't use metaprogramming much, and even if they do, it can be often made either more explicit or shifted to compile time.
Edit: The downvotes are interesting since the portability claim comes from my experience doing just that.