代码之家  ›  专栏  ›  技术社区  ›  Chowlett

部署冻结的Rails应用程序时出现问题-“找不到Rubygem机架”

  •  0
  • Chowlett  · 技术社区  · 14 年前

    我有一个Rails应用程序,我在Windows上用Rails 2.3.5开发,使用sqlite3作为我的数据库引擎,使用内部Mongrel服务器作为我的Web服务器。

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

    为了使我的部署更容易(我想…),我为部署的系统使用了我的代码库的一个分支。在这个分支上,我更新了database.yml以引用postgres并运行 rake rails:freeze:gems rake 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
    

    我搞糊涂了。如果需要机架,为什么不包括在 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
    

    )

    2 回复  |  直到 14 年前
        1
  •  4
  •   Sam Coles    14 年前

    机架不包括在内,因为它是一个框架宝石。要提供此gem,您可以手动将其解包到vendor/gems中,如下所示:

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

    你也可以开始使用 bundler 为了管理您的依赖关系,正如Rails现在默认情况下在版本3中所做的那样,以避免出现与您当前遇到的问题类似的问题。

        2
  •  0
  •   Jed Schneider    14 年前

    您的第一个问题是Rails 2.1.0不使用机架作为中间层。

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

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

    就我个人而言,我会在我的本地计算机上安装2.1.0。创建一个具有该Rails版本的新应用程序,从2.3.5项目(当然还有单元测试和公用文件夹等)中复制应用程序文件夹,然后查看是否可以让它在本地计算机上的2.1.0下运行,在运行时替换掉服务器日志上回溯失败的gems,或者在浏览器中。这比在生产模式下运行并查看Apache日志容易得多。假设您有好的单元测试,可以呈现所有视图并调整模型代码,那么您应该快速地清除自2.1.0以来添加的、在旧版本的Rails中不受支持的任何方法。