9

我目前在我的 Rails 应用程序中使用asset_sync,并且在我的 Heroku 应用程序中设置了环境变量。当我运行 heroku config 时,我得到:

AWS_ACCESS_KEY_ID:     XXXXXXXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY: XXXXXXXXXXXXXXXXXX
FOG_DIRECTORY:         MY-BUCKET-NAME
FOG_PROVIDER:          AWS
etc...

当我将我的应用程序推送到 Heroku 时,它会尝试运行 rake assets:precompile 并收到以下消息:

Preparing app for Rails asset pipeline
Running: rake assets:precompile
/usr/local/bin/ruby /tmp/build_2pa7aisux9av8/vendor/bundle/ruby/1.9.1/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets
AssetSync: using /tmp/build_2pa7aisux9av8/config/initializers/asset_sync.rb
rake aborted!
Fog directory can't be blank, Aws access key can't be blank, Aws secret access key can't be blank

但后来我运行:

heroku run rake assets:precompile --app my-app-name

...它处理一切并同步到 S3 就好了:

Running `rake assets:precompile` attached to terminal... up, run.1
/usr/local/bin/ruby /app/vendor/bundle/ruby/1.9.1/bin/rake assets:precompile:all RAILS_ENV=staging RAILS_GROUPS=assets
AssetSync: using /app/config/initializers/asset_sync.rb
/usr/local/bin/ruby /app/vendor/bundle/ruby/1.9.1/bin/rake assets:precompile:nondigest RAILS_ENV=staging RAILS_GROUPS=assets
AssetSync: using /app/config/initializers/asset_sync.rb
AssetSync: Syncing.
Using: Directory Search of /app/public/assets
Uploading: assets/application-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.css
Uploading: assets/application-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.css.gz
Uploading: assets/application-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.css.gz
Uploading: assets/application-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.css
AssetSync: Done.

任何想法为什么它在推送期间不起作用但是当我运行 rake assets:precompile 时它会正常工作?

4

2 回答 2

19

我在我们的一台服务器上遇到了同样的问题,直到我在asset_sync github页面上找到文档说你需要运行

heroku labs:enable user-env-compile --app <appname>

为了让它工作。

Heroku 也有AssetSync 文档

现在只编译一次资产真是太好了

于 2012-08-28T14:50:11.457 回答
3

我可以看到您正在使用--app my-app-name选项运行 assets:precompile rake 任务。只是为了确定,你有多个应用程序Heroku吗?(例如分期和制作)。如果你确实确保运行 heroku config--app my-app-name会产生你使用 config.xml 的输出heroku

如果您使用上述命令获得了预期的结果,则很可能这些ENV变量在 git push 上不可用,如asset_sync_test github readme中所建议的那样。您可以通过在config/environments/*.rb文件中使用以下内容来解决此问题:

config.asset_sync.aws_access_key = ENV['AWS_ACCESS_KEY_ID']
config.asset_sync.aws_access_secret = ENV['AWS_SECRET_ACCESS_KEY']
config.asset_sync.aws_bucket = ENV['FOG_DIRECTORY']
config.asset_sync.fog_provider = ENV['FOG_PROVIDER']
于 2012-06-08T06:01:33.150 回答