CSS不会在生产中加载 - 开发中的一切都很好(Rails 4.1,Capistrano 3; bootstrap),更新:nginx配置问题

时间:2014-06-22 21:14:02

标签: ruby-on-rails twitter-bootstrap deployment nginx capistrano3

问题如下:在开发过程中一切正常,但是当我将rails应用程序部署到生产环境时,该网站以纯HTML格式工作,但CSS(引导程序)无法加载(JS可能也没有)。

抱歉,我在~15种可能的解决方案中寻找了2天,但无法使其正常工作......

更新:按照@ rich-peck的建议,看起来它是服务器问题。更新了nginx配置

我的设置:

  • Ruby 2.1.2,Rails 4.1
  • Rbenv
  • mysql2 as db
  • Bootstrap 3
  • 使用nginx和乘客的服务器上的Ubuntu 14.04
  • Capistrano 3进行部署

配置如下 - production.rb:

config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local       = false
config.action_controller.perform_caching = true
config.serve_static_assets = true
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true
config.assets.version = '1.0'
config.log_level = :info
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new
config.active_record.dump_schema_after_migration = false

Capfile:

require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/bundler'
require 'capistrano/rails'
require 'capistrano/rbenv'
set :rbenv_type, :user
set :rbenv_custom_path, '/home/deploy/.rbenv/'
set :rbenv_ruby, '2.1.2'
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

在application.rb中:

...
# Enable the asset pipeline
config.assets.enabled = true
...

application.css.scss:

/* ...
*= require_self
*= require_tree .
*/

@import "bootstrap";
@import "custom";
@import "exchange_rates";
@import "contacts";

这是我尝试过的(和许多其他人一样):

# on dev machine and server /current:
RAILS_ENV=production bundle exec rake assets:precompile

请参阅Link Custom CSS and Javascript to Rails After Deployment

在配置中:

config.serve_static_assets = true # tried false
config.assets.compile = false     # tried true

请参阅rails application doesn't load css/js/images in production-environment

production.log不会抛出任何错误,除了带有js的页面。

还阅读了很多关于Rails Asset Pipeline和nginx服务器设置的内容,但无法弄明白......任何帮助都将非常感谢!!

更新:nginx服务器配置

最初,我在gorails上发布了非常有用且清晰的部署教程:https://gorails.com/deploy/ubuntu/14.04

但是,nginx没有正确启动所以我更新了配置文件(在SO的帮助下),如下所示:

/etc/nginx/nginx.conf:

events {
  worker_connections  4096;  ## Default: 1024
}

http {
    ##
    # Phusion Passenger
    ##
    # Uncomment it if you installed ruby-passenger or ruby-passenger-enterprise
    ##
    passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
    passenger_ruby /home/deploy/.rbenv/shims/ruby;
    passenger_nodejs /usr/bin/nodejs;
    server {
            listen 80 default_server;
            listen [::]:80 default_server ipv6only=on;

            server_name <URL>;
            passenger_enabled on;
            rails_env    production;
            root         /home/deploy/<PROJECT_NAME>/current/public;

            # redirect server error pages to the static page /50x.html
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    }
}

(相关网址和PROJECT_NAME已修改)

/ etc / nginx / sites-enabled / default我可以保持空白,有了这个我得到nginx运行顺利 - 除了资产的这个问题。有没有人有任何建议?

2 个答案:

答案 0 :(得分:4)

要测试的几件事情:

  
      
  • 预编译资产时,所需文件是否显示在public目录中?
  •   

当您precompile资产时,您基本上会告诉Rails资产管道合并&amp;编译public目录中的所有资产。这意味着如果您尝试在生产资产管道中包含特定文件,进行预编译

我会运行rake assets:precompile RAILS_ENV=production命令,然后查看public文件夹中的所有资源,以检查它们是否在那里

-

  
      
  • 如果资产出现在public文件夹中,是否会将其推送到服务器?
  •   

您应该SSH进入您的服务器&amp;浏览到您应用的public目录(在/current中)。这样您就可以根据需要查看资产是否已上传到服务器

如果他们不在那里,问题在于Capistrano的部署过程;如果他们 ,则表示您的Rails服务器存在问题

-

  
      
  • 如果服务器上的public文件夹中的资产 ,则表示服务器出现故障
  •   

确保它不是服务器问题的最佳方法可能是重新加载服务器。使用apache,您通常会使用service reload apache2,但我不确定nginx

这应该伴随着您的Rails安装 - 是否正在调用assets文件中定义的正确的config

答案 1 :(得分:1)

这有点偏离主题,但出于组织的考虑,您可能希望将您的Nginx服务器块放在/ etc / nginx / sites-available / default中,然后确保将其链接到/ etc / nginx / sites-启用/默认值。

它应该可以与/etc/nginx/nginx.conf中的服务器块一起使用,但最好将它放在默认主机中,或者如果你愿意,可以创建另一个虚拟主机。

很高兴你能让事情发挥作用。