【问题标题】:How to get Phusion Passenger, MySQL and Rails to play nicely in production如何让 Phusion Passenger、MySQL 和 Rails 在生产环境中发挥出色
【发布时间】:2009-05-20 15:45:14
【问题描述】:

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

生产环境如下: - Ubuntu 哈代 - Phusion 乘客 - 轨道 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 配置时,我收到相同的错误消息。

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

谢谢!

杰森

【问题讨论】:

    标签: mysql ruby-on-rails ruby passenger


    【解决方案1】:

    想通了。呜呜!

    总结: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
    

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

    【讨论】:

    • 啊,干得好。我还没有在企业 ruby​​ 上设置乘客,所以不知道这一点。当我最终升级时,我确定你只是为我节省了一些时间。
    • 我以前也有过。真烦人!
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢!很高兴知道。我是一名产品经理,所以我做了一些巫毒调试。我希望将来有人会觉得这很有帮助。
    【解决方案3】:

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

    【讨论】:

    • 是的。我实际上以root身份安装它。这是 gem 列表: *** LOCAL GEMS *** actionmailer (2.3.2) actionpack (2.3.2) activerecord (2.3.2) activeresource (2.3.2) activesupport (2.3.2) builder (2.1.2) configuration (0.0.5) cucumber (0.2.2) diff-lcs (1.1.2) fastthread (1.0.5) feedtools (0.2.29) hoe (1.11.0) launchy (0.3.3) memcache-client (1.7.0 ) mysql (2.7) 乘客 (2.1.2) polyglot (0.2.5) rails (2.3.2) rake (0.8.4) rspec (1.2.2) ruby​​forge (1.0.3) SystemTimer (1.1.1) term-ansicolor (1.0.3) 树顶 (1.2.5) uuidtools (1.0.7)
    【解决方案4】:

    我也收到了这个错误。你不能只是 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

    【讨论】:

    • 谢谢。我刚刚重建了 gem(在我的 Ubuntu 系统上,它是 /usr/bin/mysql_config)。我仍然在 apache 日志中收到相同的错误。 !!!捆绑的 mysql.rb 驱动程序已从 Rails 2.2 中删除。请安装 mysql gem 并重试:gem install mysql。
    【解决方案5】:

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

    【讨论】:

    • 感谢您的回复!我想我的路径设置正确。他们是吗? $ $PATH -bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games: $ whereis mysql mysql:/usr/bin /mysql /etc/mysql /usr/lib/mysql /usr/lib64/mysql /usr/include/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz $ mysql -p 输入密码: 欢迎使用 MySQL 监视器。命令以 ; 结尾或\g。您的 MySQL 连接 ID 为 19 服务器版本:5.0.51a-3ubuntu5.4 (Ubuntu)
    • Grr。似乎无法在 cmets 中进行换行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    相关资源
    最近更新 更多