Rails3.2生产环境预编译与Active Record初始化问题
部署环境:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
此配置项的作用正是在执行
asset:precompile
不初始化App。初始化Active Record
属于初始化整个APP的一部分。Rails Guides中有说:
意即如果设置成
false
,可能导致在编译部分文件时出现Bug(例如:内嵌的erb语句<%= something... %>
)。建议在部署前测试。https://devcenter.heroku.com/articles/rails-asset-pipeline