使用Passenger部署Rails 3的问题:错过了mysql gem

时间:2011-01-28 16:09:01

标签: mysql ruby-on-rails-3 rubygems passenger

我有一个问题似乎与另一篇文章中的问题非常相关,但我不明白达成的解决方案。我是Rails的新手,并且已经整合了一个Rails 3应用程序。我正在开发Windows,试图通过git和capistrano将它部署到我的(共享)Redhat Linux服务器,并使用Passenger来为这些页面提供服务。部署过程很顺利,但当我尝试查看网页时,我收到了乘客错误:

!!! Missing the mysql gem. Add it to your Gemfile: gem 'mysql', '2.8.1'.  

事实上,我已将相应的行添加到我的Gemfile中,并在服务器上执行“gem list”显示它在那里。

在这个post中,用户有助于完全注意到同样的问题,并观察到Gemfile.lock具有Windows的gem,即

mysql (2.8.1-x86-mingw32).  

这在我的Gemfile.lock中完全相同,所以我想同样的问题正在发生在我身上;可以看出这是供应商/缓存和供应商/捆绑中的宝石。

但是,我不明白该帖子中提议的修复是如何工作的。我可以将Gemfile.lock中的mysql行编辑为mysql(2.8.1),但后来我得到了一个不同的乘客错误

Can't find mysql-2.8.1 in any of the sources.

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

如果有人遇到同样的问题,我做的一些事情就是让它发挥作用。我不知道到底发生了什么,确切地知道了这个伎俩。

首先,在Gemfile中,我指定我们想要相关宝石的ruby和windows版本。

gem 'sqlite3-ruby', "~> 1.2.5", :platforms => [:mswin, :ruby_18]

gem 'mysql', "2.8.1", :platforms => [:mswin, :ruby_18]

然后在生产服务器上,在使用“cap deploy”之后,我从vendor / bundle和vendor / cache中删除了gem mysql-2.81-x86-mingw32。我的生产服务器让我'gem install mysql'和'gem install sqlite3-ruby'但是把它放在我家主目录的其他地方;我将这些复制到vendor / bundle和vendor / cache中。我编辑了Gemfile.lock,将'mysql(2.8.1-x86-mingw32)'行更改为'mysql(2.8.1)'。然后,生产服务器上的“bundle install”似乎安装了linux native gems(至少它说'构建原生扩展')。

毕竟,这似乎有效。

答案 1 :(得分:0)

运行命令bundle install。我相信这会解决你的问题。

另外,不要编辑或移动Gemfile.lock。让捆绑者处理这件事。