rake assets:precompile 和 RAILS_ENV=production rake assets:precompile 有什么区别?

3
这两个任务有什么区别?为什么在cap deploy时需要添加RAILS_ENV=production?
谢谢!
3个回答

7

您需要指定RAILS_ENV=production环境变量,以便在预编译资产时使用config/environments/production.rb配置文件。该文件通常包含用于资产管道的生产配置:

config.assets.js_compressor = :uglifier
config.assets.digest = true

如果省略RAILS_ENV=production,则将使用development配置(config/environments/development.rb)。

基本上在本地或生产环境下运行 RAILS_ENV=production rake assets:precompile,生成的文件应该是相同的吗?我可以在部署时同步它们吗? - dfang
它们可能会因本地和服务器上安装的JavaScript运行时而略有不同。请查看此处以更好地了解如何进行本地资产预编译。 - Andrey Chernih
@Andrey ChernihRails指南缺少这样的东西。 - ahnbizcad

1
第一个选项将在您的本地开发环境中预编译资产,而第二个选项将在生产环境中预编译资产。您配置文件中的设置很可能不同,因此它将根据您设置RAILS_ENV的环境配置来进行配置。

0

本来想写成评论,但太长了...

--

生产环境与本地环境

在这方面,你还需要考虑的是,如果你为 production 环境进行预编译,它将会针对该环境编译及配置文件。

简单来说,这意味着如果你在生产环境下有任何特殊条件或依赖关系,使用 RAILS_ENV=production 将优先于你的本地设置。这就是为什么你会在你的 Gemfile 中有这样的设置:

#Gemfile
group :production do
   gem 'xxxx'
end

--

Shell变量

你需要了解的另一件事是RAILS_ENV是一个Shell变量。这意味着每当你运行一个shell会话(即加载cmd)时,这些变量可以被设置为提供特定的功能。

关于RAILS_ENV,它意味着你可以告诉Rails暂时在production模式下运行,而不是在developmenttestingstaging模式下运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接