2

после того, как вытащил мои волосы с этим, я боюсь, что мне придется превратить знания этих гораздо мудрее .... .еще раз!Rails 3.2.2 получение 404 на таблицах стилей и js-активах после развертывания с capistrano

ОК так вот проблема, я следующие два следующих Railscasts:

deploying to a vps
asset pipeline in production

Моя установка:
Ubuntu Server 12.04
Nginx
единорог
рубин 1.9.3p125
рельсы 3.2.2

До сих пор, насколько я могу судить, все прошло до Т (или Чай или, возможно, тройника, я никогда не видел эту фразу, записанную ранее). Сидим теперь работает на моем сервере, но файлы стилей и javascript не загружаются. это, похоже, та же проблема, что и Rails 3.1 404 Error when loading .css files that are present in public/assets или Rails 404 error for Stylesheet or JavaScript files. В то время как первый не имеет ответа, последний предполагает, что это может быть проблемой, когда веб-сервер не ищет статические ресурсы и, возможно, не должен.

Кто-нибудь знает, что может быть причиной этого?

некоторые факты:

  • Во-первых, я получаю некоторые неприятные ошибки о предварительной компиляции и заметил, что мои отдельные CSS/JS файлы были минимизированы в их аналоги приложений и поэтому я изменил свои заявления в рубины, чтобы отразить это.

  • Приложение работает локально, когда я изменяю 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> 

Эти ссылки генерируют Nginx 404, если я нажимаю на них, но если я изменить URL, чтобы http://<ipaddress>/public/assets/application-dd445a707b7e96c914afd14bf1f02bbc.css я получаю рельсы генерироваться The page you were looking for doesn't exist.

А вот важные (я думаю) содержание/государственные/активы на моем сервере

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 

наконец, область, которую я не так ясно и просто так его все покрыты, вот файлы, используемые в railscast для конфигурации Capistrano, Nginx и единорог:

Я раскопан load 'deploy/assets' в capfile

развернуть.Р.Б.

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, "[email protected]: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 + х.

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

Заранее спасибо

ответ

2

не совсем уверен, как это сделать (я не уверен на этикете, отвечая на свой вопрос), но я, возможно, решили prpoblem, в принципе, я понял, что хотя сервер Nginx был перезапущен, сервер единорога не был (или, если так, эффекты не вступили в силу). Я нашел решение этого сообщения Restart Unicorn issue (capistrano), похоже, сделал трюк. теперь мне просто нужно выяснить, как подключить его к моему коду!

+0

Thanks Promethean_Sin – Trip

+0

Отвечая на ваш собственный вопрос, все в порядке! Примите это тоже, если это действительно правильный ответ. Точные ответы для других, которые прибывают сюда (как и я), являются самой важной целью. –

+0

спасибо за разъяснение @thedeeno – DazBaldwin

15

Если nginx не обслуживает статические активы, это, вероятно, связано с опечаткой в ​​директиве root. Тройной проверить, что он правильно ссылается на общую папку ваших рельсов.

В моем случае я забыл, что я перенес свое приложение в другое место. Это полностью не нарушило приложение, так как nginx все еще мог proxy_pass запрашивать через мой разъём единорога, который не двигался.

Не предполагайте, что ваше приложение подключено правильно, если вы получите ответы от своего приложения-рельсов. Коренная директива должна указывать на правильную папку для разрешения статических активов.

server { 
    ... 

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

    ... 
} 
+1

Это была тройная проверка, которую я пропустил, двойная проверка не сделала этого :) Спасибо. – yekta

+1

наткнулся на час. Благодарю. он уверен, что это не повредит тройной проверке: D –

+0

Я прочитал это и продолжал искать другие ответы, потому что мой выглядел правильно. Затем я понял, что в моем конфиге отсутствует «текущий» .... тьфу. Спасибо! – manroe