1

我一直在嘗試開始在AWS的Elastic Beanstalk上運行Rails,但我遇到了一個看似不可逾越的障礙:雖然我能夠啓動一個運行示例應用程序的新Elastic Beanstalk,我似乎無法讓EB實例成功運行我自己的代碼。Rails應用程序無法在AWS Elastic Beanstalk上運行,sqlite3錯誤

這裏是我所採取的步驟:

  1. 上本地OSX 10.9.3
  2. 安裝AWS-EB客戶端工具運行紅寶石1.9.3p545。
  3. 恪守以下來自Amazon的教程:Deploying a Rails Application to AWS Elastic Beanstalk(tl; dnr:使用'rails new'創建一個新的rails應用程序,提交git然後使用'eb init'創建類型爲'64bit的EB實例Amazon Linux 2014.03 v1.0.3運行Ruby 1.9.3',然後運行'eb start')
  4. 等待看起來永恆的EB實例創建後,我瀏覽到Amazon提供的URL。
  5. 不是看到我的Rails應用程序(其中,順便說一句,在本地運行正常)的,我得到了可怕的「很抱歉,但出事了」頁面: enter image description here

我嘗試了這些步驟多次,結果相同。我曾嘗試過使用不同的環境(例如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

繼在問題「AWS Elastic Beanstalk:啓動一個新的Rails應用程序」這個問題上的建議,這看起來與我的問題非常相似,我讓應用程序運行了一個晚上,我仍然收到錯誤。

我已經ssh進入實例。有趣的是,production.log和development.log似乎都是空的(無論如何,它們都在/ var/app/support/logs中)。不過,我覺得在passenger.log如下:

********* *********剪斷

[2014年6月12日21:42:38.8400 5133/7fe66aee4700 agents/HelperAgent/RequestHandler.h:2210]:[Client 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 rescue in' /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 require' /usr/local/share/gems1.9/gems/bundler-1.6。 2/lib/bundler/runtime.rb:76:在block (2 levels) in require' /usr/local/share/gems1.9/gems/bundler-1.6.2/lib/bundler/runtime.rb:72:in每個' /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 each' /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 require' /var/app/current/config/application.rb:7:在<top (required)>' /var/app/current/config/environment.rb:2:in要求' /var/app/current /config/environment.rb:2:in <top (required)>' config.ru:3:in要求' 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' /usr/local/share/gems1.9/gems/rack-1.5。2/lib/rack/builder.rb:55:in initialize' config.ru:1:in new' config.ru:1:in <main>' /usr/local/share/gems1.9/gems/passenger-4.0.41/helper-scripts/rack-preloader.rb:112:in eval' /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 ' /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'

App 5241 stdout: App 5241 stdout: [2014-06-12 21:45:26.2512 5133/7fe66d1ef700 Pool2/Implementation.cpp:883]:無法爲組/ var/app/current#spawn創建進程default:An錯誤發生在'void Passenger :: ApplicationPool2 :: SmartSpawner :: handleErrorResponse(Passenger :: ApplicationPool2 :: SmartSpawner :: StartupDetails 0)中啓動$ '(SmartSpawner.h:566) '(SmartSpawner.h:455) in'std :: string Passenger :: ApplicationPool2 :: SmartSpawner :: negotiatePreloaderStartup(Passenger :: ApplicationPool2 :: SmartSpawner :: StartupDetails &)'(SmartSpawner.h:566) in 'void Passenger :: ApplicationPool2 :: SmartSpawner :: startPreloader()'(SmartSpawner.h:206) in'虛擬Passenger :: ApplicationPool2 :: ProcessPtr Passenger :: ApplicationPool2 :: SmartSpawner :: spawn(const Passenger :: ApplicationPool2: :選項&)'(SmartSpawner.h:752) in'void Passenger :: ApplicationPool2 :: Group :: spawnThreadRealMain(const Passenger :: ApplicationPool2 :: SpawnerPtr &,const Passenger :: ApplicationPool2 :: Options &,unsigned in $

******** end snip ********

不確定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)。

我錯過了什麼?有沒有一些「JUST_WORK_DARNIT」配置,我忽略了設置爲true?

如果實際上sqlite3安裝出現問題(如下面所示),我該如何解決該問題?

回答

0

是的,sqlite3寶石是問題。它已安裝,但未安裝正確。關鍵文件(即sqlite3_native庫文件)缺失。

+0

任何想獲得正確安裝sqlite3 gem的想法?我認爲只是重新運行gem install是不夠的,因爲我已經嘗試過了。 – seanicus

+0

對不起,我不熟悉Elastic Beanstalk來回答這個問題。 – Hongli

2

你可以嘗試通過運行yum install sqlite-devel來安裝sqlite-devel嗎?

您可能想要使用ebextensions在豆莖上嘗試此操作。 嘗試在部署到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. 具有以下內容

    class ProtoController < ApplicationController 
    
        def index 
        end 
    
    end 
    
  3. 創建文件app /視圖/原/索引創建的應用程序/控制器/ proto_controller.rb .html.erb並在該文件中寫入...'Hello World'。

然後啓動您的環境。這應該工作。 當我嘗試沒有按照上述三個步驟,然後我也得到一個錯誤頁面。但是,通過這些更改,我沒有看到錯誤頁面。

我建議您在新環境的新目錄中執行上述步驟。我使用最新的Ruby解決方案堆棧「運行Ruby 2.0(Puma)的64位Amazon Linux 2014.03 v1.0.4」進行測試。

同樣在某些時候,當您到達this教程的第6步時,您最終可能會用gem'mysql2'替換gem'sqlite3',但這是您運行示例應用程序後的下一步。

+0

我會在早上給這個旋轉的第一件事...感謝提示!我假設配置文件條目是什麼使新的實例由beanstalk啓動時工作? – seanicus

+0

是的配置文件將適用於新的實例。 –

+0

按照你的建議做了,並添加了配置文件。我在乘客日誌中仍然遇到同樣的錯誤。我登錄到該實例驗證的sqlite-devel的通過運行 安裝了「百勝安裝的sqlite-devel的」 其產生的結果是: 「包的sqlite-devel的-3.7.17-1.9.amzn1.x86_64已經安裝和最新版本「 我感謝您對此的幫助......你有另外一個建議嗎? – seanicus

相關問題