Rails应用程序无法在AWS Elastic Beanstalk上运行,sqlite3错误

时间:2014-06-13 13:37:45

标签: ruby-on-rails amazon-web-services sqlite passenger elastic-beanstalk

我一直在尝试开始在AWS上运行Rails' Elastic Beanstalk,但我遇到了一个看似无法克服的障碍:虽然我能够启动运行示例应用程序的新Elastic Beanstalk,但我似乎无法获得EB实例来成功运行我自己的代码。

以下是我采取的步骤:

  1. 在OSX 10.9.3上本地运行ruby 1.9.3p545
  2. 安装了aws-eb客户端工具。
  3. 严格遵循亚马逊的以下教程:Deploying a Rails Application to AWS Elastic Beanstalk(tl; dnr:使用' rails new'创建新的rails应用,提交git,然后使用' eb init& #39;创建运行Ruby 1.9.3'类型' 64位Amazon Linux 2014.03 v1.0.3的EB实例,然后运行' eb start')
  4. 在等待看似永恒的EB实例创建后,我导航到亚马逊提供的网址。
  5. 而不是看到我的rails应用程序(顺便说一句,在本地运行正常),我得到了可怕的#34;我们很抱歉,但出了点问题"页: enter image description here
  6. 我多次尝试过这些步骤,结果相同。我尝试过使用不同的环境(例如Ruby 2.0.0 Puma和Passenger,根据需要通过rvm更新我的ruby)。

    在此之前被标记为重复之前,让我立即说明我已经查看了以下问题并发现它们没有解决我的问题:

    AWS Elastic Beanstalk: Launching a new Rails App

    Deploying an existing Rails app to AWS Elastic Beanstalk

    按照问题中的建议&#34; AWS Elastic Beanstalk:启动一个新的Rails应用程序&#34;,这看起来与我的问题非常相似,我让应用程序运行一夜,我仍然收到错误。< / p>

    我已经参与了这个实例。有趣的是,production.log和development.log似乎都是空的(无论如何都是/ var / app / support / logs中的那些)。但是,我在passenger.log中找到以下内容:

    ********* snip *********

    [2014-06-12 21:42:38.8400 5133 / 7fe66aee4700 agents / HelperAgent / RequestHandler.h:2210]:[客户端20]无法结账会话。 错误页面: 无法加载此类文件 - sqlite3 / sqlite3_native(LoadError)   /usr/local/share/gems1.9/gems/sqlite3-1.3.9/lib/sqlite3.rb:6:in require' /usr/local/share/gems1.9/gems/sqlite3-1.3.9/lib/sqlite3.rb:6:in救援&#39;   /usr/local/share/gems1.9/gems/sqlite3-1.3.9/lib/sqlite3.rb:2:in <top (required)>' /usr/local/share/gems1.9/gems/bundler-1.6.2/lib/bundler/runtime.rb:76:in要求&#39;   /usr/local/share/gems1.9/gems/bundler-1.6.2/lib/bundler/runtime.rb:76:in block (2 levels) in require' /usr/local/share/gems1.9/gems/bundler-1.6.2/lib/bundler/runtime.rb:72:in每个&#39;   /usr/local/share/gems1.9/gems/bundler-1.6.2/lib/bundler/runtime.rb:72:in block in require' /usr/local/share/gems1.9/gems/bundler-1.6.2/lib/bundler/runtime.rb:61:in每个&#39;   /usr/local/share/gems1.9/gems/bundler-1.6.2/lib/bundler/runtime.rb:61:in require' /usr/local/share/gems1.9/gems/bundler-1.6.2/lib/bundler.rb:132:in要求&#39;   /var/app/current/config/application.rb:7:in <top (required)>' /var/app/current/config/environment.rb:2:in要求&#39;   /var/app/current/config/environment.rb:2:in <top (required)>' config.ru:3:in要求&#39;   config.ru:3:in block in <main>' /usr/local/share/gems1.9/gems/rack-1.5.2/lib/rack/builder.rb:55:in instance_eval&#39;   /usr/local/share/gems1.9/gems/rack-1.5.2/lib/rack/builder.rb:55:in initialize' config.ru:1:in new&#39;   config.ru:1:in <main>' /usr/local/share/gems1.9/gems/passenger-4.0.41/helper-scripts/rack-preloader.rb:112:in eval&#39;   /usr/local/share/gems1.9/gems/passenger-4.0.41/helper-scripts/rack-preloader.rb:112:in preload_app' /usr/local/share/gems1.9/gems/passenger-4.0.41/helper-scripts/rack-preloader.rb:158:in&#39;   /usr/local/share/gems1.9/gems/passenger-4.0.41/helper-scripts/rack-preloader.rb:29:in <module:PhusionPassenger>' /usr/local/share/gems1.9/gems/passenger-4.0.41/helper-scripts/rack-preloader.rb:28:in&#39;

    App 5241标准: App 5241标准: [2014-06-12 21:45:26.2512 5133 / 7fe66d1ef700 Pool2 / Implementation.cpp:883]:无法为组/ var / app / current生成进程#default:启动时发生错误$      in&#39; void Passenger :: ApplicationPool2 :: SmartSpawner :: handleErrorResponse(Passenger :: ApplicationPool2 :: SmartSpawner :: StartupDetails&amp;)&#39; (SmartSpawner.h:455)      in&#39; std :: string Passenger :: ApplicationPool2 :: SmartSpawner :: negotiatePreloaderStartup(Passenger :: ApplicationPool2 :: SmartSpawner :: StartupDetails&amp;)&#39; (SmartSpawner.h:566)      in&#39; void Passenger :: ApplicationPool2 :: SmartSpawner :: startPreloader()&#39; (SmartSpawner.h:206)      in&#39;虚拟Passenger :: ApplicationPool2 :: ProcessPtr Passenger :: ApplicationPool2 :: SmartSpawner :: spawn(const Passenger :: ApplicationPool2 :: Options&amp;)&#39; (SmartSpawner.h:752)      in&#39; void Passenger :: ApplicationPool2 :: Group :: spawnThreadRealMain(const Passenger :: ApplicationPool2 :: SpawnerPtr&amp;,const Passenger :: ApplicationPool2 :: Options&amp;,$ unsords in $

    ********结束剪辑********

    不确定sqlite3是否存在问题,但它似乎确实安装在实例上。为了以防万一,我再次安装了sqlite3 gem。

    以下是乘客身份的输出:

    Version : 4.0.41
    Date    : 2014-06-13 13:25:52 +0000
    Instance: 5148
    ----------- General information -----------
    Max pool size : 6
    Processes     : 0
    Requests in top-level queue : 0
    
    ----------- Application groups -----------
    /var/app/current#default:
    App root: /var/app/current
    Requests in queue: 0
    

    我没有专家,但似乎乘客没有跑步(进程== 0)。

    我错过了什么?是否有一些&#34; JUST_WORK_DARNIT&#34;我忽略了设置为true的配置?

    事实上,如果sqlite3安装存在问题,如下所示,我该怎么做才能解决问题?

2 个答案:

答案 0 :(得分:2)

您可以通过运行yum install sqlite-devel来尝试安装sqlite-devel吗?

您可能希望使用ebextensions在beanstalk上尝试这一点。 在部署到beanstalk之前,尝试在应用程序源目录中创建路径为.ebextensions/00-myfile.config的文件。

packages:
    yum:
        sqlite-devel: []

听起来类似于此处讨论的问题Why can't I install the SQLite gem?

如果有效,请告诉我。

<强>更新

Rails 4有一件事情发生了变化。可能你遇到了这个问题。 请参阅此处的讨论:https://github.com/rails/rails/pull/8468 由于上述更改,rails 4生成的默认样本应用程序在生产模式下不起作用。但是,您可以通过修改示例应用程序以包含非默认网页来使其工作。

我尝试了以下内容: 运行“rails new appname”,“git init”,“eb init”后,请尝试以下步骤。 (基于this回答)。

  1. 编辑config / routes.rb,使其包含root :to => 'proto#index'
  2. 使用以下内容创建app / controllers / proto_controller.rb

    class ProtoController < ApplicationController
    
      def index
      end
    
    end
    
  3. 创建文件app / views / proto / index.html.erb并在该文件中写一些内容......'Hello World'。

  4. 然后启动您的环境。这应该工作。 当我尝试不遵循上述三个步骤时,我也得到一个错误页面。但是通过这些更改,我没有看到错误页面。

    我建议您在新环境的新目录中执行上述步骤。我测试了最新的Ruby解决方案堆栈“运行Ruby 2.0(Puma)的64位Amazon Linux 2014.03 v1.0.4”。

    在某些时候,当你进入this教程的第6步时,你最终可能会用gem'mysql2'替换gem'sqlite3',但这是你运行示例应用程序后的下一步。 / p>

答案 1 :(得分:0)

是的,sqlite3 gem就是问题所在。它已安装,但未安装正确。缺少密钥文件(即sqlite3_native库文件)。