【发布时间】:2014-12-10 05:06:40
【问题描述】:
好的,我知道有一些关于类似问题的帖子已打开,但我已经花了两三天的时间试图解决这个问题,但我一无所知。我在 Rails 3.2.8 上开发了一个应用程序,并使用本教程将其部署到 Digital Ocean 服务器:https://gorails.com/deploy/ubuntu/12.04
这涉及在安装了 Nginx 和 Passenger 的服务器上使用 Capistrano 3.1.0 进行部署。 Ruby 是 rvm 的经理。
会发生什么: - css 不加载,除了 application.css (仅在此文件上编码的基本 css 工作) - js没有加载 - 销毁/删除路由不起作用(可能是由于未加载主 js) - 该应用程序在开发环境中运行良好
我尝试过的:
- 在生产环境中预编译资产,通过 ssh 连接
- 在开发环境中预编译资产,然后将它们推送到生产环境
- 之后检查资产是否已生成并位于 /current/public
- 尝试几个 nginx 的配置选项
- 尝试 production.rb 的几个配置选项
- 每次尝试后重新启动 nginx:sudo service nginx restart
我认为这一定是配置问题,但我自己找到它的机会非常低(这是我自己部署的第一个应用程序),因此我们将不胜感激。 提前致谢。
config/environment/production.rb:
config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true
config.assets.precompile += ['grid.css']
config.assets.precompile += ['anything-slider.css']
config.assets.precompile += ['nivo-slider.css']
config.assets.precompile += ['jPlayer.css']
config.assets.precompile += ['lightbox.css']
config.assets.precompile += ['reset.css']
config.assets.precompile += ['anything-slider.js']
config.assets.precompile += ['jplayer.playlist.min.js']
config.assets.precompile += ['jquery-1.11.0.min.js']
config.assets.precompile += ['jquery-ui.js']
config.assets.precompile += ['jquery.jplayer.min.js']
config.assets.precompile += ['jquery.js']
config.assets.precompile += ['jquery.mousewheel.js']
config.assets.precompile += ['jquery.nivo.slider.pack.js']
config.assets.precompile += ['lightbox.min.js']
config.assets.precompile += ['nivo-slider.js']
config.assets.precompile += ['populate_jplayer.js']
config.assets.precompile += ['quickstand.js']
config.assets.precompile += ['script.js']
config.assets.precompile += ['tooltipsy.js']
config/application.rb:
config.assets.enabled = true
config.assets.initialize_on_precompile = false
Capfile:
# Load DSL and Setup Up Stages
require 'capistrano/setup'
# Includes default deployment tasks
require 'capistrano/deploy'
# Includes tasks from other gems included in your Gemfile
#
require 'capistrano/bundler'
require 'capistrano/rails'
# require 'capistrano/rails/assets'
# require 'capistrano/rails/migrations'
require 'capistrano/rvm'
set :rvm_type, :user
set :rvm_ruby_version, '2.1.3'
# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
/etc/nginx/sites-enabled/default
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name porinstinto.com;
passenger_enabled on;
rails_env production;
root /home/deploy/porinstinto/current/public;
location ~* ^/assets/ {
# Per RFC2616 - 1 year maximum expiry
# http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
expires 1y;
add_header Cache-Control public;
# Some browsers still send conditional-GET requests if there's a
# Last-Modified header or an ETag header even if they haven't
# reached the expiry date sent in the Expires header.
add_header Last-Modified "";
add_header ETag "";
break;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
application.js
//
//= require jquery
//= require jquery_ujs
//= require anything-slider
//= require jplayer.playlist.min
//= require jquery-ui
//= require jquery.jplayer.min
//= require jquery.mousewheel
//= require jquery.nivo.slider.pack
//= require lightbox.min
//= require nivo-slider
//= require populate_jplayer
//= require quickstand
//= require script
//= require tooltipsy
//= require_tree .
application.css
*
*= require anything-slider
*= require grid
*= require jPlayer
*= require lightbox
*= require nivo-slider
*= require reset
*= require_self
*= require_tree .
*/
更新: 我发现 Capistrano 预编译正在生成空的应用程序 .css 和 .js 文件。我尝试在开发时预编译资产并上传它们,但似乎 Capistrano 在部署和资产被覆盖为空文件后再次预编译。
有什么线索吗?
【问题讨论】:
-
检查 Nginx 日志。你能看到传入的资产请求吗?这些请求是否正确(拼写、路径)? Nginx 是否返回 404?
-
/var/log/nginx/error.log 似乎为空。 tail -f log/production.log 似乎不是在请求资产...
-
Started GET "/entries" for 213.27.137.58 at 2014-10-15 07:07:41 -0400 Processing by EntriesController#index as HTML Rendered layouts/_next_concert.html.haml (1.0ms) Rendered layouts/_social_network.html.haml (2.1ms) . . . Rendered layouts/_notices.html.haml (0.3ms) Rendered layouts/_copyright.html.haml (1.0ms) Completed 200 OK in 59ms (Views: 45.2ms | ActiveRecord: 5.8ms) -
所以你说所有的预编译资产都在那里?查看您的 HTML 输出 - 资产文件名是什么样的?它们与预编译的相同还是不同?完整的请求 URL 是什么样的?
-
网页加载完毕后,头部会出现一些请求的.css文件,例如:
href="/assets/anything-slider-dd5dc923ac634c7fa6d7b143be5670cd.css"这些文件是在application.html.haml上请求的:= stylesheet_link_tag "anything-slider"
标签: ruby-on-rails ruby-on-rails-3 nginx capistrano assets