Rails 是部署后的预编译资产 - Amazon EC2

Rails is precompile assets after deploy - Amazon EC2

有时我的 EC2 服务器出现故障。 我一直没有弄清楚原因。 但是这几天在一些部署操作之后,服务器宕机了。

并在部署后关闭。我有很多资产要预编译,部署时间太长。

我去了 EC2 仪表板上的监控区域和:

具有更高的价值。查看打印件:

然后,我安装了一个gem Capistrano Faster Assets,来避免capistrano预编译未修改的资产。

工作正常,部署 (cap production deploy) 非常快,只有修改后的资产被预编译。

但是,在使用网站几分钟后,有一个页面加载延迟很多,然后显示错误 504。

我通过 SSH 连接我的 EC2,转到 LOGs 文件夹 (/var/log/nginx) 和 运行 命令:tail -f error.log

令我惊讶的是,资产在那一刻正在预编译。 我在控制台中看到了这个:

App 1938 stderr: You probably don't mean to use the color value `orange' in interpolation here.
App 1938 stderr: It may end up represented as #ffa500, which will likely produce invalid CSS.
App 1938 stderr: Always quote color names when using them as strings (for example, "orange").
App 1938 stderr: If you really want to use the color value here, use `"" + $palette'.
App 1938 stderr: 
App 1938 stderr: WARNING on line 15, column 16 of /home/ubuntu/my_app/releases/20170708194653/app/another/assets/folder/colors.scss:
App 1938 stderr: You probably don't mean to use the color value `purple' in interpolation here.
App 1938 stderr: It may end up represented as #800080, which will likely produce invalid CSS.
App 1938 stderr: Always quote color names when using them as strings (for example, "purple").
App 1938 stderr: If you really want to use the color value here, use `"" + $palette'.
App 1938 stderr: 
App 1938 stderr: WARNING on line 15, column 16 of /home/ubuntu/my_app/releases/20170708194653/app/another/assets/folder/colors.scss:
App 1938 stderr: You probably don't mean to use the color value `black' in interpolation here.
App 1938 stderr: It may end up represented as #000000, which will likely produce invalid CSS.
App 1938 stderr: Always quote color names when using them as strings (for example, "black").
App 1938 stderr: If you really want to use the color value here, use `"" + $palette'.

之后我要去监控区,数值更高! 然后我假设预编译耗尽了服务器。

但是,为什么部署后预编译 运行s? 在我的配置下面:

Gemfile

gem 'capistrano-rails', group: :development
gem 'capistrano-faster-assets', '~> 1.0', group: :development

Capfile

require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/rails'
require 'capistrano/faster_assets'

# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

config/environments/production.rb

config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass
config.assets.compile = true
config.assets.digest = true

此文件中的其他资产配置已注释

环境信息

OS: Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-48-generic x86_64)
ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
rails -v: 4.2.3
nginx -v: nginx/1.8.0
passenger -v: 5.0.10

如果您需要更多信息,请在评论中告诉我。

编辑 1

我刚刚通过 Capistrano 向服务器发送了一些修改。 资产没有修改,cap production deploy 忽略了 rake assets precompile 任务。

但我访问了 NGINX error.log 并没有错。 当我访问特定的 URL 时,页面未加载并且 assets scss 警告 出现在控制台上(换句话说,assets precompile 在加载页面后 运行ning)。几分钟后,浏览器显示 HTTP ERROR 504。 CPU 利用率和 Avarege 延迟再次升高。

解决方案

防止assets precompile任务在服务器上运行。 我发布了 (已解决)以了解如何执行此操作。 我希望 assets precompile 任务不再在服务器上运行。