2012-07-07 54 views
3

我對Rails應用程序比較陌生,但我有一個本地工作的Rails應用程序,我試圖部署到共享在DreamHost上託管服務器。我已經關注了所有wiki和stackoverflow的問題,但是對此的回答仍然無法解決。當在Rails應用程序中將Rails應用程序部署到Dreamhost時出現'意外的文件結束'

我使用Capistrano進行部署,並且已經制定出所有問題以便成功部署工作。然而,當我去訪問任何不是網站上的靜態資源,我招呼着一個「內部服務器錯誤」,並從客運此錯誤:

Internal server error 
Passenger encountered the following error: 
The application spawner server exited unexpectedly: Unexpected end-of-file detected. 

Exception class: 
PhusionPassenger::Rack::ApplicationSpawner::Error 
Backtrace: 
# File Line Location 
0 /dh/passenger/lib/phusion_passenger/rack/application_spawner.rb 134 in `start' 
1 /dh/passenger/lib/phusion_passenger/spawn_manager.rb 253 in `spawn_rack_application' 
2 /dh/passenger/lib/phusion_passenger/abstract_server_collection.rb 132 in `lookup_or_add' 
3 /dh/passenger/lib/phusion_passenger/spawn_manager.rb 246 in `spawn_rack_application' 
4 /dh/passenger/lib/phusion_passenger/abstract_server_collection.rb 82 in `synchronize' 
5 /dh/passenger/lib/phusion_passenger/abstract_server_collection.rb 79 in `synchronize' 
6 /dh/passenger/lib/phusion_passenger/spawn_manager.rb 244 in `spawn_rack_application' 
7 /dh/passenger/lib/phusion_passenger/spawn_manager.rb 137 in `spawn_application' 
8 /dh/passenger/lib/phusion_passenger/spawn_manager.rb 275 in `handle_spawn_application' 
9 /dh/passenger/lib/phusion_passenger/abstract_server.rb 357 in `__send__' 
10 /dh/passenger/lib/phusion_passenger/abstract_server.rb 357 in `server_main_loop' 
11 /dh/passenger/lib/phusion_passenger/abstract_server.rb 206 in `start_synchronously' 
12 /dh/passenger/helper-scripts/passenger-spawn-server 99 

我可以SSH到服務器和手動運行'rails s'來獲得運行在3000端口上的服務器,並且所有工作都很好。

這裏是我的environment.rb:

# Load the rails application 
require File.expand_path('../application', __FILE__) 

# Initialize the rails application 
LoLItemDb::Application.initialize! 

# potential fix for Dreamhost shared resources 
# from: http://stackoverflow.com/a/3214748/189292 
require 'rubygems' 
require 'rubygems/gem_runner' 
ENV['GEM_PATH'] = '/home/gravitydev/ruby/gems:/usr/lib/ruby/gems/1.8' 
Gem.clear_paths 

deploy.rb:

user = "XXXXXXXXX" 
domain = "XXXXXXXXX.com" 
database = "mysql.XXXXXXXXX.com" 

set :application, "XXXXXXXXX" 
set :rails_env, "production" 
set :use_sudo, false 

# set rake to be verbose for capistrano 
# http://stackoverflow.com/questions/7071126/how-can-i-run-rake-with-trace-within-capistrano 
set :rake, "#{rake} --trace" 

# here we set a custom paths to commands since on Dreamhost 
# servers the user path is a bit different 
set :bundle_cmd, "/home/#{user}/.gems/bin/bundle" 
require 'bundler/capistrano' 

# redirect path for whenever, and use bundler to execute it 
set :whenever_command, "/home/#{user}/.gems/bin/bundle exec whenever" 
require 'whenever/capistrano' 

# configure credentials 
set :user, user 
set :password, "XXXXXXXXX" 

# configure git 
default_run_options[:pty] = true       # Must be set for the password prompt 
                  # from git to work 
set :repository, "[email protected]:XXXXXXXXX/XXXXXXXXX.git" # Your clone URL 
set :deploy_to, "/home/#{user}/#{domain}" 
set :scm, "git" 
set :scm_passphrase, "XXXXXXXXX"     # The deploy user's password 
set :scm_verbose, true 
set :git_shallow_clone, 1 

# configure deploy location 
set :deploy_to, "/home/#{user}/#{domain}" 

# setup web server 
server domain, :app, :web, :db, :primary => true 
#server domain, :app, :web 
#role :db, database, :primary => true 

# for SSH 
# see: http://wiki.dreamhost.com/Capistrano 
set :chmod755, "app config db lib public vendor script script/* public/disp*" 

# if you want to clean up old releases on each deploy uncomment this: 
after "deploy:restart", "deploy:cleanup" 

# run the all "LoL" tasks to refresh the database 
#after "deploy:restart", "lol:all" 

# if you're still using the script/reaper helper you will need 
# these http://github.com/rails/irs_process_scripts 

# for Passenger 
namespace :deploy do 
    task :restart do 
    run "touch #{current_path}/tmp/restart.txt" 
    end 
end 

和Gemfile中: 源 'https://rubygems.org'

gem 'rails', '3.2.6' 
gem 'bundler' 
gem 'rake' 
gem 'sqlite3' 
gem 'haml' 
gem 'nokogiri' 
gem 'json' 
gem 'whenever' 
gem 'execjs' 
gem 'therubyracer', :platforms => :ruby 
gem 'mysql2' 
gem 'rack' 
gem 'RedCloth', '4.2.9' 
gem 'jquery-rails' 
gem 'capistrano' 

# Gems used only for assets and not required 
# in production environments by default. 
group :assets do 
    gem 'sass-rails', '~> 3.2.3' 
    gem 'coffee-rails', '~> 3.2.1' 

    # See https://github.com/sstephenson/execjs#readme for more supported runtimes 
    # gem 'therubyracer', :platforms => :ruby 

    gem 'uglifier', '>= 1.0.3' 
end 

最帖子似乎表明寶石的路徑是不正確的,但我已經通過搜索找到了我可以找到的每個配置更改Google和來自Dreamhost的文檔。任何幫助是極大的讚賞!

回答

4

與此亂搞相當長的一段時間後,有兩件事情使我的解決方案。首先,部署到Dreamhost的,當你需要重寫你的GEM_HOME路徑在config.ru像這樣:

# taken from https://discussion.dreamhost.com/thread-128599.html 
ENV['GEM_HOME'] = '/home/USERNAME/.gems' 
require 'rubygems' 
Gem.clear_paths 

此外,我從我開始思考我的Gemfile是需要的寶石,我並不需要abhas閱讀評論指定。基本上,我之前添加了它們來模擬我當地的寶石安裝,但發現我並不需要它們。我最後Gemfile看起來是這樣的:

source 'https://rubygems.org' 

gem 'rails', '3.2.6' 
gem 'bundler' 
gem 'rake' 
gem 'sqlite3' 
gem 'haml' 
gem 'nokogiri' 
gem 'whenever' 
gem 'mysql' 
gem 'mysql2' 
gem 'jquery-rails' 
gem 'capistrano' 

# Gems used only for assets and not required 
# in production environments by default. 
group :assets do 
    gem 'sass-rails', '~> 3.2.3' 
    gem 'coffee-rails', '~> 3.2.1' 

    # See https://github.com/sstephenson/execjs#readme for more supported runtimes 
    # gem 'therubyracer', :platforms => :ruby 

    gem 'uglifier', '>= 1.0.3' 
end 

完成這些修改後,乘客很高興,發現所有的寶石需要!感謝abhas讓我思考在正確的領域改變事物。

編輯:我會接受這個答案時的StackOverflow讓我:)

1
在你的Gemfile變化

gem 'RedCloth', :require => 'redcloth' 

它可能工作

+0

這使我在,即使它是不是最終答案的正確方向。請參閱http://stackoverflow.com/a/11385960/189292我做了什麼來解決這個問題。謝謝回覆! – gdavis 2012-07-08 19:50:35