Rails 是部署后的预编译资产 - Amazon EC2
Rails is precompile assets after deploy - Amazon EC2
有时我的 EC2 服务器出现故障。
我一直没有弄清楚原因。
但是这几天在一些部署操作之后,服务器宕机了。
并在部署后关闭。我有很多资产要预编译,部署时间太长。
我去了 EC2 仪表板上的监控区域和:
- CPU 用法(实例)
- 延迟(ELB)
- 网络In/Out(实例)
具有更高的价值。查看打印件:
然后,我安装了一个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
任务不再在服务器上运行。
有时我的 EC2 服务器出现故障。 我一直没有弄清楚原因。 但是这几天在一些部署操作之后,服务器宕机了。
并在部署后关闭。我有很多资产要预编译,部署时间太长。
我去了 EC2 仪表板上的监控区域和:
- CPU 用法(实例)
- 延迟(ELB)
- 网络In/Out(实例)
具有更高的价值。查看打印件:
然后,我安装了一个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
任务不再在服务器上运行。