在 Ruby 中编译资产是否需要在部署中完成?为什么不是以前?

Compiling Assets in Ruby does it need to be done in deployment? Why not before?

所以这只是我最近一直在想的一个问题,我似乎在部署等待资产编译时花费了大量时间。

为什么我们不能在我们的开发机器上编译资产并提交到 git 仓库?

我目前正在使用 ruby 2.5.x 和 rails 5.2.4.x 使用带丑化器的资产管道。

有没有办法在开发中做到这一点,从而在部署期间禁用所有资产编译?

非常感谢, 西蒙

第一名:Why can we not compile the assets on our development machines and submit it in the git repo?

我们需要预编译的原因是:

  • 压缩资产资源然后缓存一些静态内容,如图像,css等等。

它帮助我们生成两个文件(.css 和 .js)并压缩我们所有的 css 文件事件它是来自供应商的文件:

<script src="/assets/application-908e25f4bf641868d8683022a5b62f54.js"></script>
<link href="/assets/application-4dd5b109ee3439da54f5bdfd78a80473.css" media="screen"
rel="stylesheet" />

它非常有用,但是 It's take time 并且`当您修改某些代码时,它不会实时重新加载资源。您必须重新编译才能应用代码。

-> 所以,这就是为什么你不应该编译 DEVELOPMENT 环境中的资产。

第二名:Is there a way to do this in development and thus disable all asset compilation during deployment? 您还可以通过 运行 此命令在 DEVELOPMENT 上使用预编译:

RAILS_ENV=development bundle exec rake assets:precompile

您可以默认使用开发环境预编译资源 config/development.rb

config.assets.debug = false

谢谢。希望对你有帮助

就我而言,如您所述,我在部署、提交并将其推送到 Github 之前进行了预编译。 然后,我使用 capistrano gem 部署到生产环境:https://github.com/capistrano/capistrano

这是预编译的命令:

rails assets:precompile

解决方案非常简单

1) 在部署期间禁用资产编译

我正在使用 elastic beanstalk 所以只需要在环境变量中设置它 2)

  • 将 /public/assets 文件夹添加到 git
  • 或者对于 elastic beanstalk 创建 .ebignore 文件并复制 .gitignore 但删除 /public/assets 条目

3) 部署前运行

  • Linux -- RAILS_ENV=development bundle exec rake assets:precompile
  • Windows -- 设置 RAILS_ENV=development && bundle exec rake assets:precompile

4) 正常部署代码到服务器

  • eb 部署