问题如下:在开发中一切正常,但是当我将 Rails 应用程序部署到生产环境时,该网站以纯 html 格式运行,但 CSS(引导程序)未加载(JS 可能也未加载)。
抱歉,我花了 2 天时间寻找了大约 15 种可能的解决方案,但无法使其发挥作用......
Update:遵循@rich-peck的建议后,看起来这是一个服务器问题。更新了 nginx 配置
我的设置:
- 红宝石 2.1.2、Rails 4.1
- Rbenv
- mysql2 作为数据库
- 引导程序3
- 服务器上的 Ubuntu 14.04,带有 nginx 和乘客
- 用于部署的 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
...
应用程序.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
see 部署后将自定义 CSS 和 Javascript 链接到 Rails https://stackoverflow.com/questions/17021635/link-custom-css-and-javascript-to-rails-after-deployment
在配置中:
config.serve_static_assets = true # tried false
config.assets.compile = false # tried true
see Rails 应用程序不在生产环境中加载 css/js/images https://stackoverflow.com/questions/6690892/rails-application-doesnt-load-css-js-images-in-production-environment
Production.log 不会抛出任何错误,除了带有 js 的页面。
还阅读了很多有关 Rails Asset Pipeline 和 nginx 服务器设置的内容,但无法弄清楚......任何帮助将不胜感激!
更新:nginx 服务器配置
最初,我遵循 gorails 上非常有用且清晰的部署教程:https://gorails.com/deploy/ubuntu/14.04 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 顺利运行 - 除了资产的问题。有人有建议吗?