我在Heroku上部署了一个新版本的Rails 5应用程序,运行在雪松-14堆栈上。它在部署时没有预编译,所以我手动执行了heroku run rake assets:precompile
。不过,我可以看到它包含旧资产,同时需要css
和js
文件。Heroku为Rails 5应用程序提供旧资产
我的文件在app/assets
,所以目录不在资产编译路径中是不可能的。
我对application.rb
和production.rb
配置:
config.assets.compile = true
# I checked the environment variable, it responds to 'enabled',
# which would return true for the option.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
# Which I changed to expire old assets.
config.assets.version='1.1'
我尝试了这些,但他们没有工作:
$ heroku restart
$ heroku run rake assets:precompile
$ heroku run rake assets:clobber
这些奇怪的事情是,他们不影响heroku服务器中的资产,我用$ heroku run ls public/assets
进行了检查。即使$ rake assets:precompile
后,即使它这样说:
WRITING /app/public/assets/application-{VERY_LONG_HASH}.js
WRITING /app/public/assets/application-{VERY_LONG_HASH}.js.gz
WRITING /app/public/assets/application-{VERY_LONG_HASH}.css
WRITING /app/public/assets/application-{VERY_LONG_HASH}.css.gz
,当我与$ heroku run ls public/assets
偷看,我仍然看到旧资产呆在那里。
编辑:我通过删除public/assets
所有本地资产,$ rake assets:clean && rake assets:precompile
重新编译他们,包括我git
库这些资产来解决它。这里有一个问题:
Heroku不应该负责编译我的资产吗?我想我每次部署我的应用程序时都不应该编译我的资产。谢谢。
虽然您解决了这个问题,但我认为问题在于您在应用程序的'heroku'实例内部执行所有操作,例如'assets:clobber'和'assets:precompile',而不是在您的本地实例中执行此操作并推送到heroku。关于你的问题,自从我开始使用heroku(即1年)以来,我也很想知道。 – Sajan