猿问

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

部署环境:
UbuntuServer12.04
Postgresql9.1
Rails3.2.14
Capistrano2.13.5
其中:pg_hba.conf文件中描述如下:
localallpostrgesqltruse
localallallmd5
localall127.0.0.1/32md5
localall::1/128md5
config/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这一步么,以及为什么?
UYOU
浏览 330回答 2
2回答

慕莱坞森

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语句)。建议在部署前测试。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答