![](/img/trans.png)
[英]Rails Error - cannot load such file -- aws-sdk (You may need to install the aws-sdk gem)
[英]Aws-sdk gem 'cannot load such file' error on remote server but not locally
这看起来与其他 问题非常相似,但这些解决方案似乎不适用于此处。
我可以在本地生产模式下运行我的rails应用程序,但在远程服务器上它失败并显示有关aws-sdk
gem的消息:
A LoadError occurred in images#index:
cannot load such file -- aws-sdk (You may need to install the aws-sdk gem)
app/controllers/images_controller.rb:9:in `block (2 levels) in index'
aws-sdk
Paperclip 4.2.0
正在使用aws-sdk
,它现在只与aws-sdk 1.x集成(没有版本2)。 require 'aws-sdk'
不在我自己的代码中。 违规行为代码:
@images = @viewable.images
respond_to do |format|
format.html {}
#line 9:
format.json {render json: @images, root: false, each_serializer: ImageSerializer}
end
到目前为止我调查的内容如下。
这似乎最有可能是原因。 也许我的服务器找不到一些关键的配置,因此aws-sdk无法初始化。 这是我的配置如何工作:
根据该页面配置S3。 我完全按照教程,除了稍微更改以适应多个生产模式服务器:
config / application.yml(由figaro加载到ENV
的值 ):
production:
s3_bucket: 'mybucket'
development:
s3_bucket: 'mybucket'
config / aws.yml(由aws-sdk自动加载):
development:
access_key_id: AK_MY_ID
secret_access_key: MYSECRET
production:
access_key_id: AK_MY_ID
secret_access_key: MYSECRET
摘自config / environments / production.rb:
config.paperclip_defaults = {
storage: :s3,
s3_credentials: {
bucket: ENV['s3_bucket']
}
}
据我所知,每个部署正确创建每个yml文件的符号链接:
deployer:~/apps/myapp/releases/20150505130826$ ll config/
lrwxrwxrwx 1 deployer deployer 53 May 5 13:08 application.yml -> /home/deployer/apps/myapp/shared/config/application.yml
lrwxrwxrwx 1 deployer deployer 45 May 5 13:08 aws.yml -> /home/deployer/apps/myapp/shared/config/aws.yml
我检查过的其他事情:
访问同一模型的其他操作和控制器也会失败,并且仅在远程服务器上失败。
在几个月的部署期间,我没有遇到其他宝石丢失的问题。 Bundler没有输出说安装失败。 来自capistrano部署输出:
~/.rvm/bin/rvm ruby-2.1.5@myapp do bundle install --path /home/deployer/apps/myapp/shared/bundle --without development test --deployment --quiet as deployer@myapp.com
DEBUG [c43674b8] Command: cd /home/deployer/apps/myapp/releases/20150505130826 && ~/.rvm/bin/rvm ruby-2.1.5@myapp do bundle install --path /home/deployer/apps/myapp/shared/bundle --without development test --deployment --quiet
INFO [c43674b8] Finished in 3.582 seconds with exit status 0 (successful).
从shell我可以检查gem的安装位置:
~/apps/myapp/releases/20150505130826$ ~/.rvm/bin/rvm ruby-2.1.5@myapp do bundle show aws-sdk
/home/deployer/apps/myapp/shared/bundle/ruby/2.1.0/gems/aws-sdk-1.64.0
在rails控制台中:
2.1.5 :001 > Gem.loaded_specs['aws-sdk'].full_gem_path
=> "/home/deployer/apps/myapp/shared/bundle/ruby/2.1.0/gems/aws-sdk-1.64.0"
所以看起来Rails 确实知道宝石。
相同的凭证在我的本地计算机上完美地工作(在开发模式和生产模式下)。 凭据也可以在远程服务器上使用s3cmd。 当我故意在本地计算机上将它们设置为不正确的值时,我从AWS获得了Access Denied错误,而不是像这样的整个操作。
我还能在哪里寻找问题?
我尝试使用gem 'aws-sdk-v1'
。 这对我的aws项目很有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.