为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

UYOU 2019-04-08 11:18:33
部署环境:UbuntuServer12.04Postgresql9.1Rails3.2.14Capistrano2.13.5其中:pg_hba.conf文件中描述如下:localallpostrgesqltruselocalallallmd5localall127.0.0.1/32md5localall::1/128md5config/deploy.rb中有一行:run"cd#{latest_release}&&#{rake}RAILS_ENV=#{rails_env}#{asset_env}assets:precompile"在远程执行capstaging:deploy时,运行到上面那行代码就会报错,提示无法连接数据库,在ActiveRecord初始化时出现错误。当时我注释掉那一行,ssh到服务器上,直接cd到项目中执行预编译,也能成功,不会出现错误。后来我在config/application.rb中加上了:config.assets.initialize_on_precompile=false#Heroku中部署Rails3.2程序也有这个要求最终问题解决。我的问题是:Rails3.2程序在production环境中执行预编译的时候,真的有初始化ActiveRecord这一步么,以及为什么?
查看完整描述

2 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

config.assets.initialize_on_precompile=false#默认为True
此配置项的作用正是在执行asset:precompile不初始化App。初始化ActiveRecord属于初始化整个APP的一部分。
RailsGuides中有说:
Ifyousetconfig.assets.initialize_on_precompiletofalse,besuretotestrakeassets:precompilelocallybeforedeploying.Itmayexposebugswhereyourassetsreferenceapplicationobjectsormethods,sincethosearestillinscopeindevelopmentmoderegardlessofthevalueofthisflag.Changingthisflagalsoaffectsengines.Enginescandefineassetsforprecompilationaswell.Sincethecompleteenvironmentisnotloaded,engines(orothergems)willnotbeloaded,whichcancausemissingassets.
意即如果设置成false,可能导致在编译部分文件时出现Bug(例如:内嵌的erb语句<%=something...%>)。建议在部署前测试。
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 329 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信