未初始化的常量AssetSync

vla*_*iov 6 assets ruby-on-rails heroku amazon-web-services

我使用gem asset_sync和aws来预编译我的资产.rake资产:预编译工作正常.我将我的应用程序推送到heroku之后

heroku run rake db:migrate
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

"未初始化的常量AssetSync"

初始化/ asset_sync.rb

AssetSync.configure do |config|
  config.fog_provider = 'AWS'
  config.aws_access_key_id = "..."
  config.aws_secret_access_key = "..."
  config.fog_directory = Rails.env + "-..."
  config.fog_region = 'eu-west-1'
end
Run Code Online (Sandbox Code Playgroud)

配置/ production.rb

config.action_controller.asset_host = "//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
config.assets.enabled = true 
Run Code Online (Sandbox Code Playgroud)

运行rake资产后:第一次预编译,我的所有应用程序/资产/图像都被移动到公共/资产.我已经从github删除了它们并将public/assets/*添加到.gitignore.这可能是问题吗?

编辑:当运行git push heroku master时,看起来它们是预编译的

   Preparing app for Rails asset pipeline
   Running: rake assets:precompile
   AssetSync: using /tmp/build_2ltvklj0gaxjp/config/initializers/asset_sync.rb
   AssetSync: using /tmp/build_2ltvklj0gaxjp/config/initializers/asset_sync.rb
   AssetSync: Syncing.
   Using: Directory Search of /tmp/build_2ltvklj0gaxjp/public/assets
   Uploading: assets/application-7e17d9f0ed9cb7ea50b750e2bfc7e28c.css.gz
   Uploading: assets/application-7e17d9f0ed9cb7ea50b750e2bfc7e28c.css
   AssetSync: Done.
   Asset precompilation completed (58.04s)
Run Code Online (Sandbox Code Playgroud)

wil*_*ynn 13

您的初始化程序假定始终定义AssetSync,但如果您的Gemfile外观如下所示,则不会出现这种情况:

group :assets do
  gem 'asset_sync'
end
Run Code Online (Sandbox Code Playgroud)

asset_sync文件建议在包装初始化:

if defined?(AssetSync)
...
end
Run Code Online (Sandbox Code Playgroud)

这是因为Heroku production没有一assets组宝石.Heroku在您运行推送时预编译您的资产 - 如果asset_sync启用,它将在那时更新S3 - 因此当您的应用程序稍后启动时,它不再需要这些宝石.因此,asset_sync初始化程序需要处理未加载gem的情况.