2014-02-26 7 views
0

나는 ruby-1.8.7-p72/mongrel 응용 프로그램을 업그레이드 할 프로젝트가있다. 내가 취하는 첫 번째 단계는 ruby-1.9.3-p484 및 레일 2.3.18 및 유니콘으로 업그레이드하는 것입니다.루비/레일을 업그레이드하고 잡동사니에서 유니콘으로 이동하는 동안의 라우팅

나는 이제 어디에서 devic 서버에서 unicorn (capistrano-rvm-capistrano 및 capistrano-unicorn을 통해 배포)을 통해 응용 프로그램을 실행할 수 있는지 알 수 있습니다. 내가 직접 또는 여부 유니콘 포트 얘기 여부를이 같은 오류가 표시

ActionController::RoutingError (No route matches "/images/pp.jpg" with {:method=>:get}): 
<internal:prelude>:10:in `synchronize' 
unicorn (4.8.2) lib/unicorn/http_server.rb:572:in `process_client' 
unicorn (4.8.2) lib/unicorn/http_server.rb:666:in `worker_loop' 
unicorn (4.8.2) lib/unicorn/http_server.rb:521:in `spawn_missing_workers' 
unicorn (4.8.2) lib/unicorn/http_server.rb:140:in `start' 
unicorn (4.8.2) bin/unicorn_rails:209:in `<top (required)>' 
/Users/ruby/.rvm/gems/ruby-1.9.3-p484/bin/unicorn_rails:19:in `load' 
/Users/ruby/.rvm/gems/ruby-1.9.3-p484/bin/unicorn_rails:19:in `<main>' 
/Users/ruby/.rvm/gems/ruby-1.9.3-p484/bin/ruby_executable_hooks:15:in `eval' 
/Users/ruby/.rvm/gems/ruby-1.9.3-p484/bin/ruby_executable_hooks:15:in `<main>' 

그러나, 어떤 자산 (이미지, 스타일 시트 등) 내가 좋아하는 유니콘 로그에 오류가 표시

서비스를 제공 할 수 없습니다입니다 나는 아파치 (mod_rewrite - 유니콘 포트 이야기)

내 자산의 위치를 ​​변경해야합니까? 현재 그들은 공개되지 않습니다. 그들은 ruby-1.8.7-p72/mongrel에서 잘 작동하지만 루비 -1.9.3-p484/rails 2.3.18/unicorn에서는 작동하지 않습니다. 또는 자산 파일의 위치를 ​​설정하는 캡 파일에 넣을 수있는 구성 항목이 있습니까? 유니콘 문서에서 아무것도 찾지 못했습니다.

누구든지이 문제를 해결하고 답을 알고 있습니까? 나는 그것을 계속 헤치고 다니지 만, 어떤 힌트라도 감사 할 것입니다.

+0

나는이 내 때문에 일어나는 생각처럼

내 유니콘 설정 파일 보인다 인스턴스가 개발 모드로 시작되지 않으므로 아파치를 통해 자산을 제공하려고합니다. 이 문제를 해결하기위한 일환으로 이제는 유니콘 구성 파일을 확장해야하므로 이제이 문제를 해결해야합니다. –

+0

개발 모드에서 시작하고 올바른 구성 파일을 읽었으므로 여전히 문제가 있습니다. 여전히 레일스 2에 있기 때문에 config.serve_static_assets = true를 사용할 수 없습니다. 웹 브릭 (Webbrick)은 자산을 잘 처리하지만 여전히 유니콘 (unicorn)을 제공하는 방법을 찾지 못했습니다. –

답변

0

나는 마침내이 일을했다. 나는이 일을 한 번만 해줘서 기쁘다. 사실, 난 단지 내 dev에 서버 worknig있어. 나는 그것이 serve_static_assets 설정 값이 없기 때문에 레일 3으로 이동할 때까지 내 컴퓨터에서 unicorn을 사용할 수 있다고 생각하지 않는다.

# 
# deployment for the dev mini server instance 2 
# app.example.com 
# deploy with 
# 
# 
require 'rvm/capistrano' 

set :application, "app" 

set :rvm_ruby_string, 'ruby-1.9.3-p484' 
set :rails_env, 'development' 

server 'app.example.com', :app, :web, :db, :primary => true 

set :user, "ruby" 
set :group, "ruby" 

set :deploy_to, "/Users/ruby/apps/#{application}" 
set :copy_remote_dir, '/Users/ruby/tmp' 


namespace :deploy do 
    desc "Start unicorn" 
    task :start, :except => { :no_release => true } do 
    run "cd #{deploy_to}/current ; unicorn_rails -c config/unicorn/development-mini-2.rb -D" 
    run "ps aux | grep unicorn_rails | head -n 1 | awk '{print $2}' > #{deploy_to}/shared/pids/unicorn.app.pid" 
    end 

    desc "Stop unicorn" 
    task :stop, :except => { :no_release => true } do 
    run "kill -s QUIT `cat #{deploy_to}/shared/pids/unicorn.app.pid`" 
    end 

    desc "Restart Unicorn" 
    task :restart, :except => { :no_release => true } do 
    run "kill -s USR2 `cat #{deploy_to}/shared/pids/unicorn.app.pid`" 
    end 
end 

내 아파치의 conf 보이는 같은 :

# config/unicorn/development-mini-2.rb 
# 
# this is launched from capistrano. see config/deploy/dev2.rb. 
# 
puts "reading development-mini-2.rb" 

rails_env = ENV['RAILS_ENV'] || 'development' 

timeout 30 
worker_processes 4 
listen 8031 

root = '/Users/ruby/apps/app' 
working_directory "#{root}/current" 
pid "#{root}/shared/pids/unicorn.app.pid" 
stderr_path "#{root}/shared/log/unicorn.log" 
stdout_path "#{root}/shared/log/unicorn.log" 

preload_app true 

GC.respond_to?(:copy_on_write_friendly=) and 
    GC.copy_on_write_friendly = true 


before_fork do |server, worker| 
    Signal.trap 'TERM' do 
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead' 
    Process.kill 'QUIT', Process.pid 
    end 

    defined?(ActiveRecord::Base) and 
    ActiveRecord::Base.connection.disconnect! 
end 

after_fork do |server, worker| 
    Signal.trap 'TERM' do 
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT' 
    end 

    defined?(ActiveRecord::Base) and 
    ActiveRecord::Base.establish_connection 
end 

내 캡 배포는 다음과 같습니다

<VirtualHost *:443> 
    ServerName app.example.com 
    DocumentRoot /Users/ruby/apps/app/current/public 

    RewriteEngine On 
    #RewriteLog "/var/log/apache2/rewrite.log" 
    #RewriteLogLevel 3 

     <Proxy "balancer://unicornservers2"> 
     Order deny,allow 
     Allow from any 
       BalancerMember http://localhost:8031 
     </Proxy> 

    # Redirect all non-static requests to unicorn 
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f 
    RewriteRule ^/(.*)$ balancer://unicornservers2%{REQUEST_URI} [P,QSA,L] 

    RequestHeader set X-Forwarded-Proto "https" 

    CustomLog /var/log/apache2/access_log "%h %l %u %t \"%r\" %>s %b" 

    <IfModule mod_ssl.c> 
     SSLEngine On 
     SSLCipherSuite "ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM" 
     SSLProtocol -ALL +SSLv3 +TLSv1 
     SSLCertificateFile "/etc/certificates/example.com.0CB3DB818A24F638D4D4A5664865B68ACB924FF1.cert.pem" 
     SSLCertificateKeyFile "/etc/certificates/example.com.0CB3DB818A24F638D4D4A5664865B68ACB924FF1.key.pem" 
     SSLCertificateChainFile "/etc/certificates/example.com.0CB3DB818A24F638D4D4A5664865B68ACB924FF1.chain.pem" 
     SSLProxyProtocol -ALL +SSLv3 +TLSv1 
    </IfModule> 

</VirtualHost>