2012-07-07 2 views
3

Je suis relativement nouveau dans les applications rails, mais j'ai une application rails qui fonctionne localement et que j'essaye de déployer dans un environnement partagé. serveur d'hébergement sur DreamHost. J'ai suivi toutes les questions du wiki et de stackoverflow, mais une réponse à cette question me manque toujours. Je suis en train de déployer avec Capistrano, et j'ai résolu tous les problèmes pour que les déploiements réussissent. Cependant, quand je vais accéder à tout ce qui est pas une ressource statique sur le site, je suis accueilli avec une « erreur interne du serveur » et cette erreur de passagers:'Fin de fichier inattendue détectée' lors du déploiement de l'application Rails sur Dreamhost sous Passager

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 

je peux SSH sur le serveur et exécuter manuellement 'rails s' pour faire fonctionner un serveur sur le port 3000, et tout fonctionne parfaitement.

Voici mon 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 

et Gemfile: la source '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 

La plupart messages semblent suggérer que le chemin vers les gemmes est incorrect, mais j'ai fait tous les changements de configuration que je peux trouver en cherchant Google et la documentation de Dreamhost. Toute aide est grandement appréciée!

Répondre

4

Après déconner avec cela pour un certain temps, une ou deux choses m'a conduit à une solution. Tout d'abord, lors du déploiement de Dreamhost vous devez remplacer votre chemin de GEM_HOME dans le config.ru comme ceci:

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

De plus, je lis le commentaire de Abhas qui m'a fait penser à mes Gemfile exigeait des pierres précieuses, je ne l'ai pas besoin spécifier. Fondamentalement, je les avais déjà ajoutés pour essayer d'imiter mon installation de gem locale, mais j'ai trouvé que je n'avais pas besoin de tous. Ma dernière Gemfile ressemble à ceci:

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 

Après avoir fait ces changements, des passagers était heureux et trouvé toutes les gemmes nécessaires! Merci à Abhas pour m'avoir fait penser à changer les choses dans le bon domaine.

EDIT: Je vais accepter cette réponse quand StackOverflow me laisse :)

1

dans votre changement Gemfile ce

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

il peut travailler

+0

Cela m'a conduit dans la bonne direction, même si elle n'a pas été la réponse finale. Voir http://stackoverflow.com/a/11385960/189292 pour ce que j'ai fait pour résoudre ce problème. Merci pour la réponse! – gdavis

Questions connexes