Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3.1 rake资产:推送到Heroku期间预编译失败_Ruby On Rails 3.1_Heroku_Asset Pipeline - Fatal编程技术网

Ruby on rails 3.1 rake资产:推送到Heroku期间预编译失败

Ruby on rails 3.1 rake资产:推送到Heroku期间预编译失败,ruby-on-rails-3.1,heroku,asset-pipeline,Ruby On Rails 3.1,Heroku,Asset Pipeline,我目前正在Rails应用程序中使用asset_sync,并且在Heroku应用程序中设置了环境变量。当我运行heroku配置时,我得到: AWS_ACCESS_KEY_ID: XXXXXXXXXXXXXXXXXX AWS_SECRET_ACCESS_KEY: XXXXXXXXXXXXXXXXXX FOG_DIRECTORY: MY-BUCKET-NAME FOG_PROVIDER: AWS etc... 当我将我的应用程序推送到Heroku时,它会尝试

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

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时效果会很好吗?

我可以看到你正在运行assets:precompile rake任务,并使用
--app my app name
选项。可以肯定的是,你在Heroku上有多个应用程序吗?(如舞台和制作)。如果您确定运行heroku config
--app my app name
会产生您使用heroku配置时的输出

如果您使用上述命令获得了预期的结果,那么很可能在git push上无法使用这里建议的
ENV
vars。您可以在
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']

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

heroku labs:enable user-env-compile --app <appname>
heroku实验室:启用用户环境编译--app


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

这在我的3.2.8应用程序中失败了,使用了未定义的方法“aws_access_key=”当我想从Travis CI直接部署到Heroku时,这对我来说也很有效。我使用的gem需要application.rb中的
config.assets.initialize\u on\u precompile=true
。因此,这个命令允许我在部署之前根本不必预编译资产。我真的帮助Heroku保持这一点…它似乎被称为Heroku实验室:启用用户环境编译-a,而不是用户环境编译,仅供参考。谢谢请注意,
user env compile
自2014年3月起已被Heroku退役。希望看到解决方案。用户环境编译不再工作。我仍然得到“雾目录不能为空,Aws访问密钥不能为空,Aws秘密访问密钥不能为空”