Rails3.2生产环境预编译与Active Record初始化问题

发布于 2022-08-28 11:22:17 字数 939 浏览 21 评论 0

部署环境:

Ubuntu Server 12.04
Postgresql 9.1
Rails 3.2.14
Capistrano 2.13.5

其中:
pg_hba.conf文件中描述如下:

local    all    postrgesql    truse
local    all    all           md5
local    all    127.0.0.1/32  md5
local    all    ::1/128       md5

config/deploy.rb中有一行:

run "cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile"

在远程执行cap staging:deploy时,运行到上面那行代码就会报错,提示无法连接数据库,在Active Record初始化时出现错误。

当时我注释掉那一行,ssh到服务器上,直接cd到项目中执行预编译,也能成功,不会出现错误。

后来我在config/application.rb中加上了:

config.assets.initialize_on_precompile = false

# Heroku中部署Rails3.2程序也有这个要求

最终问题解决。

我的问题是:Rails3.2程序在production环境中执行预编译的时候,真的有初始化Active Record这一步么,以及为什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瞳孔里扚悲伤 2022-09-04 11:22:17
  config.assets.initialize_on_precompile = false # 默认为True

此配置项的作用正是在执行asset:precompile不初始化App。初始化Active Record属于初始化整个APP的一部分。

Rails Guides中有说:

If you set config.assets.initialize_on_precompile to false, be sure to test rake assets:precompile locally before deploying. It may expose bugs where your assets reference application objects or methods, since those are still in scope in development mode regardless of the value of this flag. Changing this flag also affects engines. Engines can define assets for precompilation as well. Since the complete environment is not loaded, engines (or other gems) will not be loaded, which can cause missing assets.

意即如果设置成false,可能导致在编译部分文件时出现Bug(例如:内嵌的erb语句<%= something... %>)。建议在部署前测试。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文