2

これで髪を抜いた後、私はそれらの知識をもっと賢くする必要があるのではないかと心配しています.....もう一度!

さて、ここに問題があります。私は次の2つのレールキャストをフォローしています。

本番環境でのvps
アセットパイプラインへのデプロイ

私のセットアップ:
Ubuntu Server 12.04
nginx
unicorn
ruby​​ 1.9.3p125
rails 3.2.2

私が知る限り、すべてがT(またはTeaまたはTeeである可能性がありますが、このフレーズが書き留められているのを見たことがありません)に続いていることがわかります。現在、sitはサーバー上で実行されていますが、スタイルシートとjavascriptファイルがロードされていません。これは、パブリック/アセットに存在する.cssファイルをロードするときのRails 3.1 404エラー、またはスタイルシートまたはJavaScriptファイルのRails404エラーと同じ問題のようです。前者には答えがありませんが、後者は、静的リソースを検索していないWebサーバーに問題がある可能性があり、おそらく検索すべきではないことを示唆しています。

誰かがこれを引き起こしている可能性があることを知っていますか?

いくつかの事実:

  • まず、プリコンパイルに関していくつかの厄介なエラーが発生し、個々のcss / jsファイルが対応するアプリケーションに縮小されていることに気づいたので、これを反映するようにrubyヘルパーの宣言を変更しました。

  • に変更すると、アプリケーションはローカルで動作config.serve_static_assets = trueしますconfig/environments/production.rb

  • これが私のサーバー上の本番.logのダンプです

    Started GET "/main" for 92.237.28.149 at 2012-07-09 23:08:02 +0100
       Processing by MainController#index as HTML
         Rendered shared/_login_form.html.erb (0.4ms)
         Rendered shared/_footer.html.erb (0.4ms)
      Rendered shared/_details_form.html.erb (7.7ms)
      Rendered main/index.html.erb within layouts/main_logged (17.1ms)
    Completed 200 OK in 21ms (Views: 20.5ms | ActiveRecord: 0.0ms)
    Compiled jquery.js  (2ms)  (pid 8253)
    Compiled jquery_ujs.js  (0ms)  (pid 8253)
    Compiled admin_user.js  (227ms)  (pid 8253)
    Compiled construction.js  (227ms)  (pid 8253)
    Compiled google-map.js  (0ms)  (pid 8253)
    Compiled jquery-1.2.6.min.js  (1ms)  (pid 8253)
    Compiled jquery-ui-personalized-1.5.2.packed.js  (0ms)  (pid 8253)
    Compiled login.js  (227ms)  (pid 8253)
    Compiled main.js  (222ms)  (pid 8253)
    Compiled menu.js  (223ms)  (pid 8253)
    Compiled order_steps.js  (225ms)  (pid 8253)
    Compiled register_user.js  (223ms)  (pid 8253)
    Compiled sprinkle.js  (0ms)  (pid 8253)   
    Compiled sticky_basket/jquery.easing.1.3.js  (0ms)  (pid 8253)
    Compiled sticky_basket/stickysidebar.jquery.js  (0ms)  (pid 8253)
    Compiled sticky_basket/stickysidebar.jquery.min.js  (0ms)  (pid 8253)
    Compiled user.js  (292ms)  (pid 8253)
    Compiled application.js  (2155ms)  (pid 8253)
    Compiled admin_user.css  (12ms)  (pid 8253)
    Compiled construction.css  (0ms)  (pid 8253)
    Compiled construction.css  (1ms)  (pid 8253)
    Compiled lightbox.css  (0ms)  (pid 8253)
    Compiled login.css  (1ms)  (pid 8253)
    Compiled main.css  (0ms)  (pid 8253)
    Compiled login.css  (1ms)  (pid 8253)
    Compiled main.css  (0ms)  (pid 8253)
    Compiled main.css  (2ms)  (pid 8253)
    Compiled menu.css  (1ms)  (pid 8253)
    Compiled menu_style.css  (0ms)  (pid 8253)
    Compiled normalise.css  (0ms)  (pid 8253)
    Compiled order_steps.css  (0ms)  (pid 8253)
    Compiled order_steps.css  (1ms)  (pid 8253)
    Compiled register_user copy.css  (0ms)  (pid 8253)
    Compiled register_user.css  (0ms)  (pid 8253)
    Compiled register_user.css  (1ms)  (pid 8253)
    Compiled tab_style.css  (0ms)  (pid 8253)
    Compiled user.css  (1ms)  (pid 8253)
    Compiled application.css  (236ms)  (pid 8253)
    Compiled jquery.js  (2ms)  (pid 8253)
    Compiled jquery_ujs.js  (0ms)  (pid 8253)
    Compiled admin_user.js  (273ms)  (pid 8253)
    Compiled construction.js  (225ms)  (pid 8253)
    Compiled google-map.js  (0ms)  (pid 8253)
    Compiled jquery-1.2.6.min.js  (1ms)  (pid 8253)
    Compiled jquery-ui-personalized-1.5.2.packed.js  (0ms)  (pid 8253)
    Compiled login.js  (269ms)  (pid 8253)
    Compiled main.js  (225ms)  (pid 8253)
    Compiled menu.js  (224ms)  (pid 8253)
    Compiled order_steps.js  (226ms)  (pid 8253)
    Compiled register_user.js  (224ms)  (pid 8253)
    Compiled sprinkle.js  (0ms)  (pid 8253)   
    Compiled sticky_basket/jquery.easing.1.3.js  (0ms)  (pid 8253)
    Compiled sticky_basket/stickysidebar.jquery.js  (0ms)  (pid 8253)
    Compiled sticky_basket/stickysidebar.jquery.min.js  (0ms)  (pid 8253)
    Compiled user.js  (224ms)  (pid 8253)
    Compiled application.js  (2096ms)  (pid 8253)
    Compiled admin_user.css  (12ms)  (pid 8253)
    Compiled construction.css  (0ms)  (pid 8253)
    Compiled construction.css  (1ms)  (pid 8253)
    Compiled lightbox.css  (0ms)  (pid 8253)
    Compiled login.css  (1ms)  (pid 8253)
    Compiled main.css  (0ms)  (pid 8253)
    Compiled login.css  (1ms)  (pid 8253)
    Compiled main.css  (0ms)  (pid 8253)
    Compiled main.css  (1ms)  (pid 8253)
    Compiled menu.css  (2ms)  (pid 8253)
    Compiled menu_style.css  (0ms)  (pid 8253)
    Compiled normalise.css  (0ms)  (pid 8253)
    Compiled order_steps.css  (0ms)  (pid 8253)
    Compiled order_steps.css  (1ms)  (pid 8253)
    Compiled register_user copy.css  (0ms)  (pid 8253)
    Compiled register_user.css  (0ms)  (pid 8253)
    Compiled register_user.css  (1ms)  (pid 8253)
    Compiled tab_style.css  (0ms)  (pid 8253)
    Compiled user.css  (1ms)  (pid 8253)
    Compiled application.css  (179ms)  (pid 8253)
    
    
    Started GET "/main" for 92.237.28.149 at 2012-07-09 23:15:00 +0100
    Processing by MainController#index as HTML   
      Rendered shared/_login_form.html.erb (1.2ms)
      Rendered shared/_footer.html.erb (1.1ms)
      Rendered shared/_details_form.html.erb (15.5ms)
      Rendered main/index.html.erb within layouts/main_logged (80.9ms)
    Completed 200 OK in 142ms (Views: 140.4ms | ActiveRecord: 0.0ms)
    
    
    Started GET "/main" for 92.237.28.149 at 2012-07-09 23:33:54 +0100
    Processing by MainController#index as HTML
      Rendered shared/_login_form.html.erb (1.2ms)
      Rendered shared/_footer.html.erb (1.1ms)
      Rendered shared/_details_form.html.erb (15.6ms)
      Rendered main/index.html.erb within layouts/main_logged (80.7ms)
    Completed 200 OK in 142ms (Views: 140.0ms | ActiveRecord: 0.0ms)
    

ご覧のとおり、コンパイル前の苦情はもうありません。

これが生成されたhtmlです

  <title>HTML Snippet</title>
  <link href="/assets/application-dd445a707b7e96c914afd14bf1f02bbc.css" media="screen" rel="stylesheet" type="text/css" />
  <script src="/assets/application-def3878140cda305cb0ca5ef745fd758.js" type="text/javascript"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
  <script src="http://cloud.github.com/downloads/malsup/cycle/jquery.cycle.all.latest.js" type="text/javascript"></script>

これらのリンクをクリックするとnginx404が生成されますが、URLをに変更する http://<ipaddress>/public/assets/application-dd445a707b7e96c914afd14bf1f02bbc.cssとrailsが生成されますThe page you were looking for doesn't exist.

そして、これが私のサーバー上の/ public / Assetsの重要な(私が思う)内容です

application-7c90c01effcf9d8593e28e4c4b716ac2.css
application-7c90c01effcf9d8593e28e4c4b716ac2.css.gz
application.css
application.css.gz
application-dd445a707b7e96c914afd14bf1f02bbc.css
application-dd445a707b7e96c914afd14bf1f02bbc.css.gz
application-def3878140cda305cb0ca5ef745fd758.js
application-def3878140cda305cb0ca5ef745fd758.js.gz
application.js
application.js.gz

最後に、私があまり明確ではなく、すべてがカバーされている領域です。これは、capistrano、nginx、およびunicornの構成のためにrailscastで使用されるファイルです。

load 'deploy/assets'capfileのコメントを外しました

deploy.rb

require "bundler/capistrano"

server "92.237.28.149", :web, :app, :db, primary: true

set :application, "little_oven_deploy"
set :user, "daz"
set :deploy_to, "/home/#{user}/apps/#{application}"
set :deploy_via, :remote_cache
set :use_sudo, false

set :scm, "git"
set :repository, "git@bitbucket.org:DanBaldwin/little_oven_deploy.git"
set :branch, "master"

default_run_options[:pty] = true
ssh_options[:forward_agent] = true

after "deploy", "deploy:cleanup" # keep only the last 5 releases

namespace :deploy do
  %w[start stop restart].each do |command|
    desc "#{command} unicorn server"
    task command, roles: :app, except: {no_release: true} do
      run "/etc/init.d/unicorn_#{application} #{command}"
    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_init.sh /etc/init.d/unicorn_#{application}"
    run "mkdir -p #{shared_path}/config"
    put File.read("config/database.example.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

nginx.conf

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

server {
  listen 80 default deferred;
  # server_name example.com;
  root /home/deployer/apps/blog/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

root = "/home/daz/apps/little_oven_deploy/current"
working_directory root
pid "#{root}/tmp/pids/unicorn.pid"
stderr_path "#{root}/log/unicorn.log"
stdout_path "#{root}/log/unicorn.log"

listen "/tmp/unicorn.little_oven_deploy.sock"
worker_processes 2
timeout 30

unicorn_init.sh

#!/bin/sh
### BEGIN INIT INFO
# Provides:          unicorn
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Manage unicorn server
# Description:       Start, stop, restart unicorn server for a specific application.
### END INIT INFO
set -e

# Feel free to change any of the following variables for your app:
TIMEOUT=${TIMEOUT-60}
APP_ROOT=/home/daz/apps/little_oven_deploy/current
PID=$APP_ROOT/tmp/pids/unicorn.pid
CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production"
AS_USER=daz
set -u

OLD_PIN="$PID.oldbin"

sig () {
  test -s "$PID" && kill -$1 `cat $PID`
}

oldsig () {
  test -s $OLD_PIN && kill -$1 `cat $OLD_PIN`
}

run () {
  if [ "$(id -un)" = "$AS_USER" ]; then
    eval $1
  else
    su -c "$1" - $AS_USER
  fi
}

case "$1" in
start)
  sig 0 && echo >&2 "Already running" && exit 0
  run "$CMD"
  ;;
stop)
  sig QUIT && exit 0
  echo >&2 "Not running"
  ;;
force-stop)
  sig TERM && exit 0
  echo >&2 "Not running"
  ;;
restart|reload)
  sig HUP && echo reloaded OK && exit 0
  echo >&2 "Couldn't reload, starting '$CMD' instead"
  run "$CMD"
  ;;
upgrade)
  if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
  then
    n=$TIMEOUT
    while test -s $OLD_PIN && test $n -ge 0
    do
      printf '.' && sleep 1 && n=$(( $n - 1 ))
    done
    echo

    if test $n -lt 0 && test -s $OLD_PIN
    then
      echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds"
      exit 1
    fi
    exit 0
  fi
  echo >&2 "Couldn't upgrade, starting '$CMD' instead"
  run "$CMD"
  ;;
reopen-logs)
  sig USR1
  ;;
*)
  echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
  exit 1
  ;;
esac

unicorn_init.shもchmod+xです。

情報提供者が過負荷になる可能性があることをお詫びしますが、それが私の問題のスナップショットを提供するのに役立つ場合は、診断を受けるのに役立ちます。

前もって感謝します

4

2 に答える 2

15

nginxが静的アセットを提供していない場合は、rootディレクティブのタイプミスが原因である可能性があります。Railsパブリックフォルダーを正しく参照していることを3回確認します。

私の場合、アプリを別の場所に移動したことを忘れました。nginxは、移動していないユニコーンソケットを介してproxy_passリクエストを送信できたため、これによってアプリが完全に破損することはありませんでした。

Railsアプリから応答を受け取った場合、アプリが適切に接続されていると思い込まないでください。ルートディレクティブは、静的アセットを解決するために正しいフォルダーを指している必要があります。

server {
  ...

  # make absolutely sure this is pointing to your app/public folder
  root /home/deployer/apps/blog/current/public;

  ...
}
于 2012-09-26T15:06:06.887 に答える
2

これを行う方法がよくわかりません(自分の質問に答えるエチケットについてはわかりません)が、問題を解決した可能性があります。基本的に、nginxサーバーは再起動していましたが、ユニコーンサーバーは再起動していなかった(またはそのため、効果が発揮されませんでした)。この投稿の解決策を見つけましたUnicorn の再起動の問題 (capistrano)はうまくいったようです。あとは、それを自分のコードに配線する方法を理解する必要があります!

于 2012-07-10T13:04:06.417 に答える