2013-09-27 1 views
1

У меня возникли проблемы с подключением моего приложения для рельсов. Поскольку раньше я кодировал рельсы, но не много развертывал, это, вероятно, что-то в моих конфигурациях и/или процессе развертывания.Проект Rails: маршруты дают 500 ошибок в производстве, но работают в разработке

Все работает нормально в процессе разработки. Все тесты проходят, я вижу маршруты и доступ к ним на локальном хосте. Когда в производстве (рельсы 4, nginx, единорог на CentOS), я получаю 500 ошибок на тех же маршрутах.

Когда я рейка маршрутов на сервере, я вижу все те же маршруты, что и при разработке. Рейк маршруты на сервере возвращает (укороченные из полного списка маршрутов):

  Prefix Verb URI Pattern       Controller#Action 
     companies GET /companies(.:format)     companies#index 
       POST /companies(.:format)     companies#create 
    new_company GET /companies/new(.:format)    companies#new 
    edit_company GET /companies/:id/edit(.:format)   companies#edit 
     company GET /companies/:id(.:format)    companies#show 
       PATCH /companies/:id(.:format)    companies#update 
       PUT /companies/:id(.:format)    companies#update 
       DELETE /companies/:id(.:format)    companies#destroy 

Что, как вы можете догадаться, происходит от ресурсов: компании

Но http://sortinghat.foo.com/companies дает мне рельсы 500 страницы на производстве (foo, очевидно, не является доменом, но я только что заменил реальный домен).

Я нахожусь в затруднительном положении, просматривая здесь и в Интернете идеи, прочитав множество сообщений о том, как развернуть рельсы, и просмотрел множество конфигурационных файлов (вы увидите, что это те, которые я скопировал из другого места, но все это кажется довольно стандартным). Вероятно, я пропустил что-то очевидное. Я не вижу никаких проблем в журналах.

Единственный ключ, который у меня есть, это то, что у меня нет каталога/etc/nginx/sites-enabled, и похоже, что capistrano хочет его, но я не видел никаких ошибок во время развертывания крышки (кроме очистки Я отмечаю внизу). В этом случае это единственный сайт, который запускается, поэтому мне не нужен виртуальный хост, и я не думаю, что он мне нужен, поэтому его не беспокоило.

Заранее благодарим за любую помощь.

Вот мой nginx.config

# Taken from http://www.sitepoint.com/deploying-your-rails-app-to-the-cloud-with-unicorn-nginx-and-capistrano/ 

upstream unicorn { 
    server unix:/tmp/unicorn.sortinghat.sock fail_timeout=0; 
} 

server { 
    listen 80 default deferred; 
    server_name sortinghat; 
    if ($host = 'sortinghat') { 
     rewrite ^/(.*)$ http://sortinghat.foo.com/$1 permanent; 
    } 
    root /var/www/sortinghat/current/public; 

    location ^~ /assets/ { 
    gzip_static on; 
    expires max; 
    add_header Cache-Control public; 
    } 

    try_files $uri/index.html $uri @unicorn; 

    location @unicorn { 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    proxy_pass http://unicorn; 
    } 

    error_page 500 502 503 504 /500.html; 
    client_max_body_size 4G; 
    keepalive_timeout 10; 
} 

Мой unicorn.rb

# Taken from http://www.sitepoint.com/deploying-your-rails-app-to-the-cloud-with-unicorn-nginx-and-capistrano/ 

# Define your root directory 
root = "/var/www/sortinghat/current" 

# Define worker directory for Unicorn 
working_directory root 

# Location of PID file 
pid "#{root}/tmp/pids/unicorn.pid" 

# Define Log paths 
stderr_path "#{root}/log/unicorn.log" 
stdout_path "#{root}/log/unicorn.log" 

# Listen on a UNIX data socket 
listen "/tmp/unicorn.sortinghat.sock" 

# 16 worker processes for production environment 
worker_processes 16 

# Load rails before forking workers for better worker spawn time 
preload_app true 

# Restart workes hangin' out for more than 240 secs 
timeout 240 

И мой deploy.rb (Примечание: Я сделал некоторые вещи мир читаемым с CHMOD 777 как быстро Я просто пытаюсь заставить это работать внутри, чтобы запустить тест позади брандмауэра. Возможно, я смогу их вытащить, но я сомневаюсь, что они что-то напугали.)

require 'capistrano/ext/multistage' 

set :application, "sortinghat" 

# Need to use gnutar since that is what the server uses 
# see https://coderwall.com/p/ypwmpg 
set :copy_local_tar, "/usr/bin/gnutar" if `uname` =~ /Darwin/ 

# remove old releases 
set :keep_releases, 3 


# Source Control 
# You can set :scm explicitly or Capistrano will make an intelligent guess based on known version control directory names 
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none` 
set :repository, "[email protected]m:me/project.git" # changed here but correct in the actual file 
set :scm, :git 
set :branch, "master" 
set :deploy_via, :copy 


# Deployment 
# Default deployment directory is /u/apps/#{application}” (where #{application} but alternate can be set 
# set :deploy_to, "/var/www" 
set :user, "mherschberg" 
default_run_options[:pty] = true 
set :use_sudo, false 
set :ssh_options, {:forward_agent => true} 


role :web, "sortinghat.foo.com"       # Your HTTP server, Apache/etc 
role :app, "sortinghat.foo.com"       # This may be the same as your `Web` server 
role :db, "lin-db3.foo.com", :primary => true #, :no_release => true   # This is where Rails migrations will run 
#role :db, "your slave db-server here" # no slave for test 

set :rails_env, "production" 

set :stages, ["staging", "production"] 
set :default_stage, "staging" 

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


namespace :deploy do 
    %w[start stop restart].each do |command| 
    desc "#{command} unicorn server" 
    task command, roles: :app, except: {no_release: true} do 
     sudo "chmod 777 /var/www/sortinghat/current/config/unicorn_ini.sh" 
     run "/etc/init.d/unicorn_#{application} #{command}" # Using unicorn as the app server 
    end 
    end 

    task :setup_config, roles: :app do 
    sudo "ln -nfs #{current_path}/config/nginx.conf /etc/nginx/sites-enabled/#{application}" 
    sudo "ln -nfs #{current_path}/config/unicorn_ini.sh /etc/init.d/unicorn_#{application}" 
    sudo "chmod 777 #{current_path}/config/unicorn_ini.sh" 
    sudo "chmod 777 /var/www/sortinghat/current/config/unicorn_ini.sh" 
    run "mkdir -p #{shared_path}/config" 
    put File.read("config/database.yml"), "#{shared_path}/config/database.yml" 
    puts "Now edit the config files in #{shared_path}." 
    end 
    after "deploy:setup", "deploy:setup_config" 

    task :symlink_config, roles: :app do 
    run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml" 
    end 
    after "deploy:finalize_update", "deploy:symlink_config" 

    desc "Make sure local git is in sync with remote." 
    task :check_revision, roles: :web do 
    unless `git rev-parse HEAD` == `git rev-parse origin/master` 
     puts "WARNING: HEAD is not the same as origin/master" 
     puts "Run `git push` to sync changes." 
     exit 
    end 
    end 
    before "deploy", "deploy:check_revision" 
end 


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

# If you are using Passenger mod_rails uncomment this: 
# namespace :deploy do 
# task :start do ; end 
# task :stop do ; end 
# task :restart, :roles => :app, :except => { :no_release => true } do 
#  run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" 
# end 
# end 

крышка развертывания работает только с одной ошибкой, но это просто проблема с разрешениями, удаляющими старые версии. (колпачок развертывания: холодная побежал штраф)

** [out :: sortinghat.foo.com] rm: cannot remove `/var/www/sortinghat/releases/20130917180205/thout-curl-include=dir/include/build_info': Permission denied 
+0

При попытке получить доступ к сайту есть ошибка в журнале производственных рельсов? Если так, то, что это? – MrTheWalrus

+0

Только две записи в production.log представляют собой инструкции INFO из нескольких дней назад, представляющие мои две миграции. development.log также пуст. – hershey

+0

unicorn.log в основном только информационные справки о работниках, но я вижу одну ошибку I, [2013-09-27T14: 33: 47.711561 # 10907] INFO -: перезагрузка config_file =/var/www/sortinghat/current/config/unicorn.rb E, [2013-09-27T14: 33: 47.783595 # 10907] ERROR -: перезагрузка ошибки config_file =/var/www/sortinghat/current/config/unicorn.rb: Нет такого файла или каталога - /var/www/sortinghat/releases/20130920160224/log/production.log (Errno :: ENOENT) E, [2013-09-27T14: 33: 47.783716 # 10907] ERROR -:/usr/local/rvm/gems /ruby-2.0.0 -p247/gems/unicorn-4.6.3/lib/unicorn/util.rb: 53: in 'initialize ' ... – hershey

ответ

-1

Ответ от друга было: использование пассажира, не единорог. Это в значительной степени работало из коробки.

Вы можете найти его на https://www.phusionpassenger.com/

(я имел какой-то странный вопрос, который я получил ошибку 128 из GitHub Ничего не изменилось в моей deploy.rb кроме раскомментировать закомментирована выстроились в нижней части для пассажира. конечно, ничего не изменилось в моей учетной записи github или AFAIK локально. Я не уверен, что произошло, но я удалил свой ключ github для этой машины, создал новый, а затем все сработало.)

Смежные вопросы