2010-08-18 75 views
0

我有一个rails应用程序,我使用Rails 2.3.5在Windows上开发,使用sqlite3作为我的数据库引擎,内部Mongrel服务器作为我的web服务器。部署冻结Rails应用程序时出现问题 - “找不到RubyGem机架”

我将这个应用程序部署到运行Rails 2.1.0的托管Linux机器,使用Postgres作为我的数据库,以及Apache(调用dispatch.cgi)作为我的web服务器。我没有权限更新本地Ruby或Rails安装,或者本地安装gems。

为了使我的部署更容易(我认为...),我已经为我部署的系统取得了我的代码库分支。在这个分支上,我更新了database.yml来引用postgres并运行rake rails:freeze:gemsrake gems:unpack:dependencies。然后我将这个分支导出到我的生产服务器。

当我尝试查看生产服务器上我的应用程序,我得到的错误:

Application error 
Rails application failed to start properly" 

检查Apache的错误日志,我看到以下内容:

./../config/../vendor/rails/railties/lib/initializer.rb:271:in `require_frameworks': Could not find RubyGem rack (~> 1.0.1) (RuntimeError) 
    from ./../config/../vendor/rails/railties/lib/initializer.rb:134:in `process' 
    from ./../config/../vendor/rails/railties/lib/initializer.rb:113:in `send' 
    from ./../config/../vendor/rails/railties/lib/initializer.rb:113:in `run' 
    from ./../config/environment.rb:9 
    from dispatch.cgi:5:in `require' 
    from dispatch.cgi:5 

我很困惑。如果需要Rack,为什么不包括在gems:unpack中?我怎样才能得到这个工作?

(如果是相关的,vendor$ find . -name rack*给出如下:

./rails/railties/lib/rails/rack 
./rails/railties/lib/rails/rack.rb 
./rails/railties/lib/rails/.svn/text-base/rack.rb.svn-base 
./rails/actionpack/test/controller/rack_test.rb 
./rails/actionpack/test/controller/.svn/text-base/rack_test.rb.svn-base 
./rails/actionpack/lib/action_controller/rack_lint_patch.rb 
./rails/actionpack/lib/action_controller/.svn/text-base/rack_lint_patch.rb.svn-base 

)不包含

回答

4

机架,因为它是一个框架的宝石。给供应商的这种宝石可以手动解压到卖主/宝石是这样的:

cd vendor/gems; gem unpack rack -v="1.0.1"

你也可以开始使用bundler来管理你的依赖,像Rails现在默认确实在三个版本,以避免类似的问题你目前正在经历的一件事。

+0

啊,这绝对有帮助,但我们不是那里。首先,我还必须耙宝石:refr esh_specs,它已上架。我现在收到以下错误: /var/www/chowlett/dominion_frozen/vendor/rails/activesupport/lib/active_support/whiny_nil。rb:52:在'method_missing':未定义的方法'env_table'为nil:NilClass(NoMethodError) from /var/www/chowlett/dominion_frozen/vendor/rails/actionpack/lib/action_controller/cgi_process.rb:22:in' '__send__' 如果它不相关,请告诉我,我会提出一个新问题。 – Chowlett 2010-08-23 08:24:09

+0

不要紧,这最后似乎是在Debian下的Apache的一个问题,并且没有使用Passenger。如果需要,我会尝试通过它并提出一个新问题。 – Chowlett 2010-08-23 09:40:45

0

你的第一个问题是,Rails 2.1.0不使用Rack作为中间层。

您还需要更改config/environment.rb文件中的rails版本。

另外,根据您使用过的其他宝石,您可能需要返回到与2.1.0一起使用的稳定版本。

个人而言,我会在本地机器上安装2.1.0用该rails版本创建一个新应用程序,从2.3.5项目中复制应用程序文件夹(当然还有您的单元测试和公共文件夹等,以及看看你是否可以在本地机器上运行2.1.0以上版本,取代gem,在服务器日志或浏览器中回溯失败,这将比在生产模式下运行更容易,假设你有很好的单元测试来渲染所有的视图并且弹出你的模型代码,那么你应该清除旧版本Rails中不支持的自2.1.0以来添加的任何方法,相当快

+0

谢谢,我将来可能会这样做。目前,冻结Rack似乎已经到了下一个已知的bug,为此我需要在我的系统管理员身上微笑地安装和配置Passenger。 – Chowlett 2010-08-27 18:48:41

相关问题