4

我编写了一个在没有数据库的情况下运行良好的 Rails 应用程序。现在,我将注册数据库放入其中。它在生产中不起作用。当然,在我的 Mac 上一切正常。

这是生产环境: - Ubuntu Hardy - Phusion Passenger - Rails 2.3.2

机器上的 MySQL 运行良好。

我有包含正确信息的 database.yml 文件。我可以毫无问题地运行迁移:

rake db:migrate RAILS_ENV=production

数据库正在正确更新。

所以,我点击 tmp/restart 并点击该站点。我收到了 500 错误,但没有任何内容写入生产日志(非常奇怪)。所以,我检查了 apache 日志,我收到了这条消息:

!!!捆绑的 mysql.rb 驱动程序已从 Rails 2.2 中删除。请安装 mysql gem 并重试:gem install mysql。

我已经安装了 MySQL gem(2.7 版)。我仍然收到此错误。

当我将生产数据库配置更改为指向虚拟 sqlite 数据库时,一切正常。当我将其更改回 MySQL 配置时,我收到相同的错误消息。

我完全没有想法,我希望它能够正常工作。我正在拔头发,非常感谢您提供的任何帮助。我已经包含了我能想到的所有内容,但如果有更多信息有用,请告诉我。

谢谢!

杰森

4

5 回答 5

8

弄清楚了。呜呼!

总结:Ruby 企业版(更新,感谢宏立!)有自己的一套宝石。即使我正在更新 gem,它也不是Passenger 正在阅读的那个。

我是这样想的:

>> /usr$ whereis gem

gem: /usr/bin/gem /usr/bin/gem1.8 /opt/ruby-enterprise-1.8.6-20090201/bin/gem

>> /usr$ cd /opt/ruby-enterprise-1.8.6-20090201/bin/

>> /opt/ruby-enterprise-1.8.6-20090201/bin$ ls -l

total 2624
-rwxr-xr-x 1 root root    3907 2009-03-26 14:47 erb
-rwxr-xr-x 1 root root     813 2009-03-26 14:47 gem
-rwxr-xr-x 1 root root     349 2009-03-26 14:47 irb
-rwxr-xr-x 1 root root     386 2009-03-26 14:47 passenger-config
-rwxr-xr-x 1 root root     402 2009-03-26 14:47 passenger-install-apache2-module
-rwxr-xr-x 1 root root     396 2009-03-26 14:47 passenger-make-enterprisey
-rwxr-xr-x 1 root root     392 2009-03-26 14:47 passenger-memory-stats
-rwxr-xr-x 1 root root     392 2009-03-26 14:47 passenger-spawn-server
-rwxr-xr-x 1 root root     386 2009-03-26 14:47 passenger-status
-rwxr-xr-x 1 root root     391 2009-03-26 14:47 passenger-stress-test
-rwxr-xr-x 1 root root     366 2009-03-26 14:47 rackup
-rwxr-xr-x 1 root root     367 2009-03-26 14:47 rails
-rwxr-xr-x 1 root root     364 2009-03-26 14:47 rake
-rwxr-xr-x 1 root root    1560 2009-03-26 14:47 rdoc
-rwxr-xr-x 1 root root      64 2009-03-26 14:46 ree-version
-rwxr-xr-x 1 root root    1516 2009-03-26 14:47 ri
-rwxr-xr-x 1 root root 2609905 2009-03-26 14:46 ruby
-rwxr-xr-x 1 root root     178 2009-03-26 14:47 testrb

>> /opt/ruby-enterprise-1.8.6-20090201/bin$ ./gem list

*** LOCAL GEMS ***

actionmailer (2.3.2)
actionpack (2.3.2)
activerecord (2.3.2)
activeresource (2.3.2)
activesupport (2.3.2)
fastthread (1.0.5)
passenger (2.1.2)
postgres (0.7.9.2008.01.28)
rack (0.9.1)
rails (2.3.2)
rake (0.8.4)
sqlite3-ruby (1.2.4)

>> /opt/ruby-enterprise-1.8.6-20090201/bin$ ./gem install mysql

Building native extensions.  This could take a while...
Successfully installed mysql-2.7
1 gem installed

然后,我重新启动了实例,它工作了。

于 2009-05-20T19:08:35.833 回答
5

@Jason Butler:我没有足够的声誉发表评论,所以我会将其作为答案发布。

拥有自己的宝石的不是 Phusion Passenger,而是 Ruby Enterprise Edition。这实际上已记录在案,并解释了其原因:http ://www.rubyenterpriseedition.com/documentation.html#_how_ree_installs_itself_into_the_system

于 2009-05-20T20:36:24.037 回答
0

您是否尝试过通过 sudo 安装 mysql gem?

于 2009-05-20T15:50:34.127 回答
0

我也收到了这个错误。您不能只 gem install mysql 而不将其指向您的 mysql_config 文件,例如:

sudo gem install mysql -- --with-mysql-config=/path/to/user/local/mysql/bin/mysql_config

我不得不从 macports 安装 mysql,因为我的系统上没有可用的标头。我之前使用的是 MAMP。

Macports 安装到 /opt 所以我的 mysql-config 路径是 /opt/local/bin/mysql_config5

于 2009-05-20T16:03:46.660 回答
0

mysql bin目录是否在生产中运行Rails的用户路径中?

于 2009-05-20T17:55:46.043 回答