为什么`rake assets:precompile`抛出"getaddrinfo:名称或服务未知"?(re:asset_sync)

use*_*833 7 ruby-on-rails cdn amazon-s3 fog asset-pipeline

我正在尝试设置我的rails应用程序,使用asset_sync gem 将其资产上传到Amazon的AWS S3 ,遵循这些说明.我知道我的S3配置正确,因为我的应用程序无法将图像上传到S3.我很确定我的所有设置都是正确的:

FOG_DIRECTORY => mybucketname
FOG_PROVIDER  => AWS
FOG_REGION    => s3-us-west-2
Run Code Online (Sandbox Code Playgroud)

但我一直收到一个错误:

-bash> heroku run rake assets:precompile --remote staging
Running rake assets:precompile attached to terminal... up, run.1
AssetSync: using default configuration from built-in initializer
mkdir -p /app/public/assets
...
mkdir -p /app/public/assets
AssetSync: Syncing.
rake aborted!
getaddrinfo: Name or service not known                                # <-- error
Run Code Online (Sandbox Code Playgroud)

在本地编译会产生稍微不同的错误:

-bash> bundle exec rake assets:precompile
AssetSync: using default configuration from built-in initializer
mkdir -p /Users/bart/Dev/MyApp/myapp/public/assets
...
mkdir -p /Users/bart/Dev/MyApp/myapp/public/assets
AssetSync: Syncing.
rake aborted!
getaddrinfo: nodename nor servname provided, or not known             # <-- error
Run Code Online (Sandbox Code Playgroud)

use*_*833 10

我将错误追溯到Fog中的'连接'行,这是一个asset_sync运行时依赖项,结果发现我的FOG_REGION设置不正确.就我而言,该地区应该是us-west-2,而不是s3-us-west-2.

自从我配置了S3帐户以来已经有一段时间了,所以我首先尝试通过登录AWS S3控制台,单击存储桶名称,然后单击"属性"来确定我正在使用的区域.在那里,该地区被列为俄勒冈州.好吧,那没用.然后我点击了我现有存储桶的对象和文件夹浏览器,直到找到资产,查找其"属性",然后看到"链接":

https:// s3-us-west-2 .amazonaws.com/mybucketname/uploads/mymodel/image/1135/myimage.jpg

我确信这s3-us-west-2是正确的,直到我注意到Fog添加了s3-前缀.

无论如何,我现在知道,一旦你通过名字找到你的区域(例如俄勒冈州),你可以在这个S3区域列表中查找它(它是位置约束列下的名称).

我希望这可以帮助别人.