3

私はレールアプリに比較的慣れていませんが、DreamHost の共有ホスティングサーバーにデプロイしようとしているローカルで動作するレールアプリを持っています。私はすべてのwikiとstackoverflowの質問に従いましたが、これに対する答えはまだ私を避けています.

私は Capistrano で展開しています。展開を成功させるためにすべての問題を解決しました。ただし、サイト上の静的リソースではないものにアクセスしようとすると、「内部サーバー エラー」と Passenger からの次のエラーが表示されます。

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, "git@github.com: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

2 に答える 2

4

かなり長い間これをいじった後、いくつかのことが私を解決に導きました。まず、Dreamhostにデプロイするときは、次のようにconfig.ruのGEM_HOMEパスをオーバーライドする必要があります。

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

Gemfileさらに、abhasからのコメントを読んだところ、指定する必要のない宝石が必要だと思いました。基本的に、ローカルのgemインストールを模倣するために以前にそれらを追加しましたが、すべてが必要なわけではないことがわかりました。私の決勝戦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が私に許可したときに私はこの答えを受け入れます:)

于 2012-07-08T19:22:25.347 に答える
1

gemfileでこれを変更します

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

それはうまくいくかもしれません

于 2012-07-07T12:45:00.733 に答える