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

问题如下:在开发中一切正常,但是当我将Rails应用程序部署到生产环境中时,该网站以纯HTML格式工作,但CSS(bootstrap)不会被加载(JS也可能不是)。

对不起,我找了两天〜15个可能的解决scheme,不能使它工作…

更新:在遵循@ rich-peck的build议之后,看起来这是一个服务器问题。 用nginxconfiguration更新

我的设置:

  • Ruby 2.1.2,Rails 4.1
  • Rbenv
  • mysql2作为分贝
  • Bootstrap 3
  • 服务器上的Ubuntu 14.04与nginx和乘客
  • Capistrano 3部署

configuration如下 – 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 

请参阅部署后将自定义CSS和Javascript链接到Rails

在configuration中:

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

看到rails应用程序不会在生产环境中加载css / js / images

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

还读了很多关于Rails资产pipe道和nginx服务器设置,但无法弄清楚…任何帮助将不胜感激!

更新:nginx服务器configuration

最初,我遵循gorails中非常有帮助和明确的部署教程: https ://gorails.com/deploy/ubuntu/14.04

但是,nginx没有正确启动,所以我更新了configuration文件(在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; } } } 

(有问题的url和PROJECT_NAME已编辑)

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

有几件事要测试:

  • 当你预先编译你的资产时,所需的文件是否出现在public目录中?

当你precompile你的资产时,你基本上会告诉Rails资产管道来合并和编译public目录中的所有资产。 这意味着如果您试图在生产资产管道中包含特定文件,则应该对其进行预编译

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

  • 如果资产存在于公用文件夹中,它们是否被推送到服务器?

您应该SSH到您的服务器和浏览到您的应用程序的public目录(在/current )。 这将允许您查看您的资产是否已上传到您的服务器,如您所需

如果他们不在那里,问题是Capistrano的部署过程; 如果他们那里,这意味着你的Rails服务器有问题

  • 如果资产位于服务器上的公用文件夹中,则意味着服务器有问题

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

这应该伴随着看你的Rails安装 – 是否调用config文件中定义的正确的assets

这有点偏离主题,但为了组织的缘故,您可能希望将Nginx服务器块放在/ etc / nginx / sites-available / default中,然后确保已将其链接到/ etc / nginx / sites-enabled / default 。

它应该可以在/etc/nginx/nginx.conf中的服务器块上正常工作,但是最好的做法是把它放在默认的主机上,或者如果你愿意,可以创建另一个虚拟主机。

很高兴你能够使事情工作。