LoadError: cannot load such file -- mysql2/mysql2

3,143 views
Skip to first unread message

Chris Miller

unread,
Jan 3, 2015, 4:46:36 PM1/3/15
to trac...@googlegroups.com
Hi Folks,

I'm running on Fedora 20.

I am stumped. I have followed the instructions in https://github.com/TracksApp/tracks/blob/master/doc/installation.md quite carefully. I get to the "Configure Variables: 3" which tells me to:
bundle exec rake time:zones:local
which produces the following error: 
rake aborted!
LoadError: cannot load such file -- mysql2/mysql2
/usr/local/share/gems/gems/mysql2-0.3.17/lib/mysql2.rb:8:in `require'
/usr/local/share/gems/gems/mysql2-0.3.17/lib/mysql2.rb:8:in `<top (required)>'
/usr/local/share/gems/gems/bundler-1.7.10/lib/bundler/runtime.rb:76:in `require'
/usr/local/share/gems/gems/bundler-1.7.10/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
/usr/local/share/gems/gems/bundler-1.7.10/lib/bundler/runtime.rb:72:in `each'
/usr/local/share/gems/gems/bundler-1.7.10/lib/bundler/runtime.rb:72:in `block in require'
/usr/local/share/gems/gems/bundler-1.7.10/lib/bundler/runtime.rb:61:in `each'
/usr/local/share/gems/gems/bundler-1.7.10/lib/bundler/runtime.rb:61:in `require'
/usr/local/share/gems/gems/bundler-1.7.10/lib/bundler.rb:134:in `require'
/var/www/vhost/todo.tryx.org/TracksApp-tracks-f98d32c/config/application.rb:7:in `<top (required)>'
/var/www/vhost/todo.tryx.org/TracksApp-tracks-f98d32c/Rakefile:5:in `require'
/var/www/vhost/todo.tryx.org/TracksApp-tracks-f98d32c/Rakefile:5:in `<top (required)>'
(See full trace by running task with --trace)

I don't know enough about Ruby on Rails to understand the problem. I've looked around and I find:
gem list mysql
*** LOCAL GEMS ***
mysql2 (0.3.17, 0.3.16, 0.3.13)

I find I have:
/usr/lib64/gems/ruby/mysql2-0.3.13/lib/mysql2/mysql2.so
/usr/local/lib64/gems/ruby/mysql2-0.3.16/lib/mysql2/mysql2.so
/usr/local/lib64/gems/ruby/mysql2-0.3.17/lib/mysql2/mysql2.so
/usr/local/share/gems/gems/mysql2-0.3.16/ext/mysql2/mysql2.so
/usr/local/share/gems/gems/mysql2-0.3.17/ext/mysql2/mysql2.so

I don't see any obvious deficiencies, but apparently Ruby and/or Rails does. Unless I can run "rake" there is apparenlty a serious defect, and I don't know what it is.

Can anybody advise me?



Dan Rice

unread,
Jan 3, 2015, 7:09:45 PM1/3/15
to trac...@googlegroups.com
Did `bundle install` execute without errors?

Try `bundle list mysql2` instead of `gem list mysql2`.

Dan

--
You received this message because you are subscribed to the Google Groups "TracksApp" group.
To unsubscribe from this group and stop receiving emails from it, send an email to tracksapp+...@googlegroups.com.
To post to this group, send email to trac...@googlegroups.com.
Visit this group at http://groups.google.com/group/tracksapp.
For more options, visit https://groups.google.com/d/optout.

Chris Miller

unread,
Jan 4, 2015, 11:14:28 AM1/4/15
to trac...@googlegroups.com
Hi Dan,

Did `bundle install` execute without errors?

Yes.  I was warned not to execute as "root" because it would limit other users, which raises the question, how I accomplish this for an arbitrary user that has no permission to login, like Apache. But, this is not the problem I suffer, since I am doing everything as "root" for the time being.

Try `bundle list mysql2` instead of `gem list mysql2`.
/usr/local/share/gems/gems/mysql2-0.3.17

Thanks for the help. I really have almost no understanding about how Ruby and Rails do things.

Chris.

Dan Rice

unread,
Jan 4, 2015, 11:51:11 AM1/4/15
to trac...@googlegroups.com
Sudo causes a lot of problems. I'd uninstall the ones that were installed via bundler. This should do the trick: `bundle list | tail -n +2 | awk '{print $2}' | xargs gem uninstall`

After you've cleaned that up, do `bundle install` again without sudo, and see where that gets you.

Dan

--

Chris Miller

unread,
Jan 4, 2015, 1:26:50 PM1/4/15
to trac...@googlegroups.com
Hi Dan,

Voila!  I did as you suggested. Uninstall all ruby-esque packages, selectively delete anything with "ruby" or "gem" in the path, delete the application and the passenger file trees.

Start over: 
as root: unzip/untar each, build passenger and install the apache module.
as apache: follow all the rest of the installation instructions, including "bundle install --path vendor/bundle --without development test"

Success!  Well, success so far as I can measure it.

One last problem. When I goto the Tracks URL, I don't get the result of having run ruby, I get a static page of .../public/dispatch.fcgi:
#!/usr/bin/env ruby
#
# You may specify the path to the FastCGI crash log (a log of unhandled
# exceptions which forced the FastCGI instance to exit, great for debugging)
# and the number of requests to process before running garbage collection.
#
# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
# and the GC period is nil (turned off).  A reasonable number of requests
# could range from 10-100 depending on the memory footprint of your app.
#
# Example:
#   # Default log path, normal GC behavior.
#   RailsFCGIHandler.process!
#
#   # Default log path, 50 requests between GC.
#   RailsFCGIHandler.process! nil, 50
#
#   # Custom log path, normal GC behavior.
#   RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
#
require File.dirname(__FILE__) + "/../config/environment"
require 'fcgi_handler'


I am so close to having this thing working, that I can almost take it off my list of things to do...  (-:

Thanks for your help,

Chris.



Dan Rice

unread,
Jan 4, 2015, 2:54:13 PM1/4/15
to trac...@googlegroups.com
If you are using Passenger you do not need FCGI. What does the relevant section of your Apache configuration look like?

Chris Miller

unread,
Jan 4, 2015, 3:48:57 PM1/4/15
to trac...@googlegroups.com
Hi Dan,


On Sunday, January 4, 2015 11:54:13 AM UTC-8, Dan Rice wrote:
If you are using Passenger you do not need FCGI. What does the relevant section of your Apache configuration look like?


Ha! (Humor, not derision, ...) I'm not using FCGI on purpose; the application thinks I want it from .htaccess. I think the application is right, but I have misconfigured something simple.




My apache config looks like this:
DocumentRoot /var/www/vhost/todo.tryx.org/TracksApp-tracks-f98d32c/public
  
<Directory "/var/www/vhost/todo.tryx.org/TracksApp-tracks-f98d32c/public">
        Options +Indexes +FollowSymLinks -MultiViews 
        AllowOverride all
        Require all granted
</Directory>

Elsewhere, I am including the modules mod_cgi, and mod_fcgid.



My unchanged .htaccess:
# General Apache options
# If you're on Debian try the following instead of the fastcgi-script line:
# AddHandler fcgid-script .fcgi
AddHandler fastcgi-script .fcgi
AddHandler cgi-script .cgi

Options +FollowSymLinks +ExecCGI
# If you don't want Rails to look in certain directories,
# use the following rewrite rules so that Apache won't rewrite certain requests

# Example:
#   RewriteCond %{REQUEST_URI} ^/notrails.*
#   RewriteRule .* - [L]
# Redirect all requests not available on the filesystem to Rails
# By default the cgi dispatcher is used which is very slow

# For better performance replace the dispatcher with the fastcgi one
#
# Example:
#   RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
RewriteEngine On
# If your Rails application is accessed via an Alias directive,
# then you MUST also set the RewriteBase in this htaccess file.
#
# Example:
#   Alias /myrailsapp /path/to/myrailsapp/public
#   RewriteBase /myrailsapp
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
# In case Rails experiences terminal errors
# Instead of displaying this message you can supply a file here which will be rendered instead

# Example:
#   ErrorDocument 500 /500.html
ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"



And finally, the apache error log has this very telling remark:
[Sun Jan 04 12:19:46.115223 2015] [fcgid:warn] [pid 3488] (104)Connection reset by peer: [client 10.1.1.34:49205] mod_fcgid: error reading data from FastCGI server
[Sun Jan 04 12:19:46.115324 2015] [core:error] [pid 3488] [client 10.1.1.34:49205] End of script output before headers: dispatch.cgi


This error log entry is suspicious, and as a result I have tried commenting out:
#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
which has no effect on the behavior one way or the other. mod_proxy_fcgi is irrelevant.

Thanks for the help,

Chris.

Chris Miller

unread,
Jan 4, 2015, 4:05:37 PM1/4/15
to trac...@googlegroups.com
Hi Dan,

I was reviewing...

I notice the comment in .htaccess: # If you're on Debian try the following instead of the fastcgi-script line:
Although I am not on Debian, I'm on Fedora 20, I am using mod_fcgid, and not mod_fastcgi, so I followed the suggestion.

This has move the problem forward,but not completely solved it. I am now clearly invoking Rails, because I see "<h2>Application error</h2>Rails application failed to start properly"

You can see it too: http://todo.tryx.org/

Dan Rice

unread,
Jan 4, 2015, 4:14:39 PM1/4/15
to trac...@googlegroups.com
What's in your Apache error log now?

The paths in your Tracks config section look OK. Are you sure Apache has mod_passenger enabled?

You should configure the .htaccess file to be ignored, because it's trying to load FCGI. Change to "AllowOverride None" in your Tracks <Directory> section.



--

Chris Miller

unread,
Jan 4, 2015, 4:43:12 PM1/4/15
to trac...@googlegroups.com
Hi Dan,


On Sunday, January 4, 2015 1:14:39 PM UTC-8, Dan Rice wrote:
What's in your Apache error log now?
Same error, but it indicates that someone besides me has requested "/".  Probably you.
 

The paths in your Tracks config section look OK. Are you sure Apache has mod_passenger enabled?
That was a good question, but I am very sure and I have confirmed with "Server-info" handler. It is there.

 
You should configure the .htaccess file to be ignored, because it's trying to load FCGI. Change to "AllowOverride None" in your Tracks <Directory> section.
When I do that, it turns off the rewrite, so I get the default content for a virtual host with no explicitly defined content.  However, if I simply comment out the AddHandlers, then We are back to getting the 500 notice, so that is probably progress.

Reinier Balt

unread,
Jan 5, 2015, 3:09:16 AM1/5/15
to trac...@googlegroups.com

Hi all,

 

The FCGI stuff is outdated. I’m not surprised it doesn’t work anymore. I’ve accepted patched from people who got it working, but I haven’t looked at it myself for a long while :-)

 

The recommended way to run Tracks is using Passenger. Perhaps we should remove the fcgi and .htaccess stuff to avoid confusion.

 

Reinier

 

--

Chris Miller

unread,
Jan 5, 2015, 10:34:07 AM1/5/15
to trac...@googlegroups.com
Hi Folks,

I have eliminated .htaccess based on advice here and elsewhere. The relevant portions of httpd.conf:
DocumentRoot /var/www/vhost/todo.tryx.org/TracksApp-tracks-f98d32c/public
<Directory "/var/www/vhost/todo.tryx.org/TracksApp-tracks-f98d32c/public">
        Options +Indexes +FollowSymLinks -MultiViews 
        AllowOverride all
        Require all granted
</Directory>



I have confirmed passenger is correctly deployed:
http://todo.tryx.org/srvr-info



I am getting "default" content, meaning a request for "/" does not invoke the application, and I don't know why.
http://todo.tryx.org/


I think this is probably trivial for someone is familiar with Ruby on Rails. Thanks for the help,

Chris.

Chris Miller

unread,
Jan 5, 2015, 12:32:00 PM1/5/15
to trac...@googlegroups.com
Hi Folks,


On Monday, January 5, 2015 7:34:07 AM UTC-8, Chris Miller wrote:
I am getting "default" content, meaning a request for "/" does not invoke the application, and I don't know why.
http://todo.tryx.org/

I have disabled "welcome.conf", which was giving me the default content. This was one configuration error that has been discovered and eliminated.


Now I either get a directory contents listing or I am blocked from viewing "/", depending on the state of <Directory .../public> options [+/-]Indexes </Directory>; +Indexes gives me a directory contents listing, and -Indexes gives me a permission violation. http://todo.tryx.org/srvr-info verifies that passenger is correctly configured.

I think this now comes down to the question, why is a request for "/" not being dispatched to the Tracks application?

Reinier Balt

unread,
Jan 5, 2015, 1:49:26 PM1/5/15
to trac...@googlegroups.com, trac...@googlegroups.com
Hi Chris 
What does your tracks config for passenger look like?


Mvg,
Reinier Balt


--

Chris Miller

unread,
Jan 5, 2015, 2:35:35 PM1/5/15
to trac...@googlegroups.com
Hi Reinier,

On Monday, January 5, 2015 10:49:26 AM UTC-8, Reinier Balt wrote:
What does your tracks config for passenger look like?

I didn't know what you wanted, so I went looking in config/ and I found deploy.rb-example! This oversight will be the solution to the problem. I failed to notice any instructions, but any "example" is a dead give away for custom configuration. So, I set some configuration entries based on intuition alone, so they might be wrong. If you can tell me where the manual is, I'll read that.  Meanwhile, I linked it in the /public directory, so you can see it: http://todo.tryx.org/deploy.rb

If you want to see something else, please ask.

Dan Rice

unread,
Jan 5, 2015, 2:38:19 PM1/5/15
to trac...@googlegroups.com
You definitely don't need to be looking at deploy.rb. It is for automated deployments using Capistrano, which is a sysops automation tool. Not what you're doing.

Dan

--

Chris Miller

unread,
Jan 5, 2015, 2:44:38 PM1/5/15
to trac...@googlegroups.com
Hi Dan,

On Monday, January 5, 2015 11:38:19 AM UTC-8, Dan Rice wrote:
You definitely don't need to be looking at deploy.rb. It is for automated deployments using Capistrano, which is a sysops automation tool. Not what you're doing.

Right... O.K., so I'm left with a request for "tracks config for passenger".  Where do I find that?  Is this what you seek?

<IfModule mod_passenger.c>
        PassengerRoot           /var/www/vhost/todo.tryx.org/passenger-4.0.56
        PassengerDefaultRuby    /usr/bin/ruby
</IfModule>

Chris Miller

unread,
Jan 5, 2015, 2:56:26 PM1/5/15
to trac...@googlegroups.com
Hi Folks,


On Monday, January 5, 2015 11:44:38 AM UTC-8, Chris Miller wrote:
Right... O.K., so I'm left with a request for "tracks config for passenger".  Where do I find that?  Is this what you seek?

I'm going to go way out on a limb,and assume that it will be somewhere in the config/ directory, so here it is...  http://todo.tryx.org/config/ temporarily available for your viewing pleasure.

Chris Miller

unread,
Jan 5, 2015, 3:07:29 PM1/5/15
to trac...@googlegroups.com


On Monday, January 5, 2015 11:56:26 AM UTC-8, Chris Miller wrote:
I'm going to go way out on a limb,and assume that it will be somewhere in the config/ directory, so here it is...  http://todo.tryx.org/config/ temporarily available for your viewing pleasure.

I had to move it. It can be seen at http://todo.tryx.org/
Message has been deleted

Chris Miller

unread,
Jan 5, 2015, 5:37:37 PM1/5/15
to trac...@googlegroups.com
Hi Folks,

As a diagnostic, I followed the instructions: "bundle exec rails server -e production", which seem to work perfectly after I started serving static assets, which exonerates everything but the Apache configuration. So with this much narrowed scope, where can I look for the problem?

Reinier Balt

unread,
Jan 6, 2015, 6:01:48 AM1/6/15
to trac...@googlegroups.com

Hi Chris,

 

I’m running tracks using SSL in a subdomain. My config is:

 

<VirtualHost *:443>

        ServerName tracks.x.y:443

 

        SSLEngine on

        SSLCertificateFile /etc/pki/tls/certs/x.y.nu.pem

        SSLCertificateKeyFile /etc/pki/tls/private/x.y.key

 

        ErrorLog /var/www/tracks/log/apache.log

        CustomLog /var/www/tracks/log/access_tracks_log combined

        DocumentRoot /var/www/tracks/public

 

        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/x-javascript text/javascript application/javascript text/css application/x-javascript

</VirtualHost>

 

So I think you need to wrap your config in a <VirtualHost> section

 

Reinier

 

Van: trac...@googlegroups.com [mailto:trac...@googlegroups.com] Namens Chris Miller
Verzonden: maandag 5 januari 2015 16:34
Aan: trac...@googlegroups.com
Onderwerp: Re: [Tracks-discuss] LoadError: cannot load such file -- mysql2/mysql2

 

Hi Folks,

--

Reinier Balt

unread,
Jan 6, 2015, 6:10:17 AM1/6/15
to trac...@googlegroups.com

Hi Chris,

 

If you want to server Tracks from Apache with Passenger, there is no need to run webbrick and no need to change the config to let webbrick serve static assets.

 

I’m using Fedora + Apache + Passenger + MySQL

 

Tracks is in /var/www/tracks

Databases point to MySQL, tested using

bundle exec rake db:migrate RAILS_ENV=production

                (this will fail if the config is wrong)

 

I followed the installation instructions for passenger using passenger-install-apache2-module: in /etc/apache/conf.module.d I created 11-passenger.conf with the output of the install command (this could be different on your system/version of passenger)

 

LoadModule passenger_module /usr/local/share/gems/gems/passenger-4.0.53/buildout/apache2/mod_passenger.so

<IfModule mod_passenger.c>

  PassengerRoot /usr/local/share/gems/gems/passenger-4.0.53

  PassengerDefaultRuby /usr/bin/ruby

</IfModule>

 

I added a tracks.conf to /etc/apache/conf.d with my VirtualHost settings, see my other email with the contents

 

Hope this helps

 

Reinier

 

Van: trac...@googlegroups.com [mailto:trac...@googlegroups.com] Namens Chris Miller
Verzonden: maandag 5 januari 2015 23:38
Aan: trac...@googlegroups.com
Onderwerp: Re: [Tracks-discuss] LoadError: cannot load such file -- mysql2/mysql2

 

Hi Folks,

--

Chris Miller

unread,
Jan 6, 2015, 11:27:48 AM1/6/15
to trac...@googlegroups.com
Hi Reinier,

On Tuesday, January 6, 2015 3:10:17 AM UTC-8, Reinier Balt wrote:

If you want to server Tracks from Apache with Passenger, there is no need to run webbrick and no need to change the config to let webbrick serve static assets.

It true that Apache/Passenger is an alternative to WEBrick, and I realize that. I was having so much trouble getting Apache/Passenger to work, that I wanted to be sure it was ONLY Apache/Passenger, so I fired up WEBrick to confirm that everything else was correct. It was. However, WEBrick was not without its challenges. If you don't change config.serve_static_assets to 'true', than the application is ugly and actually unworkable. In config/environments/production.rb there is a hint:
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false

Chris.

Chris Miller

unread,
Jan 6, 2015, 11:32:36 AM1/6/15
to trac...@googlegroups.com
Hi Rainier,

On Tuesday, January 6, 2015 3:01:48 AM UTC-8, Reinier Balt wrote:

 So I think you need to wrap your config in a <VirtualHost> section

The <VirtualHost> Apache directive is useful, but not mandatory, however, I am, in fact, using a virtual host.

Chris.

Chris Miller

unread,
Jan 6, 2015, 11:40:57 AM1/6/15
to trac...@googlegroups.com
Hi Folks,

I have made great progress. The problem was:
<IfModule mod_passenger.c>
       PassengerRoot           /var/www/vhost/todo.tryx.org/passenger-4.0.56 <== This is not right. This is not even close!
       PassengerDefaultRuby    /usr/bin/ruby
</IfModule>

I didn't invent that, so I'm going to blame my dog. Bad dog!  When I found that there was an RPM available, I installed the RPM, instead of the tarball, and I learned the path was much different. So, now I have passenger working.



This is not the end of the issue, however. I'm getting an error from passenger:

Web application could not be started
You have already activated rake 10.0.4, but your Gemfile requires rake 10.4.2. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)



Clearly I have multiple versions. There are the "system" gems, and then the "bundle" gems, which are apparently controlled by my application, tracks, in this case. For whatever reason, and I suspect an environment variable that I have not set, different versions are being selected in different contexts. I don't know enough about how Ruby or Rails does things to understand this, but I have a much smaller example:

$ rake time:zones:local
rake aborted!
You have already activated rake 10.0.4, but your Gemfile requires rake 10.3.2. Prepending `bundle exec` to your command may solve this.
/var/www/vhost/todo.tryx.org/tracks/config/boot.rb:6:in `<top (required)>'
/var/www/vhost/todo.tryx.org/tracks/config/application.rb:1:in `<top (required)>'
/var/www/vhost/todo.tryx.org/tracks/Rakefile:5:in `<top (required)>'
(See full trace by running task with --trace)
$ bundle exec rake time:zones:local

* UTC -08:00 *
Pacific Time (US & Canada)
Tijuana


I think this is now a Ruby, or Rails, or Ruby on Rails question, and probably quite simple, but beyond my experience. Does anybody have any insight to this?

Chris Miller

unread,
Jan 6, 2015, 1:45:09 PM1/6/15
to trac...@googlegroups.com
Hi Folks,

Everything is working and I learned a lot, so I'm going to answer some of my own questions.


On Tuesday, January 6, 2015 8:40:57 AM UTC-8, Chris Miller wrote:
I'm getting an error from passenger:

Web application could not be started
You have already activated rake 10.0.4, but your Gemfile requires rake 10.4.2. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)

It is not clear to anybody why this happened. It shouldn't have. However, it was very easy to get around. As root execute the following command:
gem install rake -v 10.4.2
... and later when rack 1.4.5 is the required version...
gem install rack -v 1.4.5


This may get you there and it may not. If you see complaints about permission problems, it will probably be SELinux. Confirm it is SELinux by "setenforce permissive", "systemctl restart httpd", and request your page. Then put SELinux back with, "setenforce enforcing". To fix the SELinux restrictions, you need to know about this policy update Type Enforcement, passenger.te:

module passenger 1.0;
require {
        type httpd_sys_content_t;
        type passenger_t;
        type sysfs_t;
        type hwdata_t;
        class file execute;
        class dir { read search };
}
#============= passenger_t ==============
allow passenger_t httpd_sys_content_t:file execute;
allow passenger_t hwdata_t:dir search;
allow passenger_t sysfs_t:dir read;

To use the above Type Enforcement script, save it as passenger.te:

# checkmodule -M -m -o passenger.mod passenger.te
# semodule_package -o passenger.pp -m passenger.mod
# semodule -i passenger.pp 



Thanks for the help, I've got a million thing to get done, now.

Chris. 

Dan Rice

unread,
Jan 6, 2015, 1:56:21 PM1/6/15
to trac...@googlegroups.com
Great to hear you have things working, and thanks for reporting back with what made you successful!

Dan

--

Chris Miller

unread,
Jan 6, 2015, 2:32:12 PM1/6/15
to trac...@googlegroups.com
Hi Dan,

On Tuesday, January 6, 2015 10:56:21 AM UTC-8, Dan Rice wrote:
... and thanks for reporting back with what made you successful!

I learned a lot and I benefited from the experience of others, so it is responsible to share what I learned -- especially since I made so many mistakes along the way. The truth is that this is nowhere near as difficult a deployment as I made it, but that was a result of ignorance, which is on the way to dissipation.
 



Great to hear you have things working,

I think you have a really good application, and I've looked at a lot of them. I won't know for sure until I get through the user manual and get some data in it. It was clear to me that you understand GTD more than most when I read the line from the manual, and, of course, now I can't find it, that said, "What can I do *right now*?". This has always been missing. Astonishing. It looks like your flexible use of contexts is designed to accomplish this.

It looks like I may be learning more about Ruby on Rails than I wanted when I started this project.
Reply all
Reply to author
Forward
0 new messages