All Possible Products
Performance

Your code is slow because your algorithm is \$O(n^4)\$, where \$n = 900\$:


The outer x loop runs for 900 iterations (\$O(n)\$).
For every x, the y loop runs for 900 iterations (\$O(n)\$).
For every product, you search the array to see if the entry already exists.  Since the length of the array will grow up to \$O(n^2)\$, and .include? does a linear search, the deduplication takes \$O(n^2)\$ time.


You can cut the time in half by taking advantage of the fact that \$x \cdot y = y \cdot x\$.  The big win, though, would be to store the results in a Set, which performs deduplication for "free".  That would bring your runtime down to \$O(n^2)\$.

Style

The standard indentation width for Ruby is two spaces.

The parentheses around (x * y) are superfluous.  However, parentheses for the parameter to .include? would be considered good practice.