Ruby on rails 轨道:AWS S3和x2B;回形针:在AssetController中获取命名错误#创建
我正在尝试在我的rails应用程序中使用回形针设置Amazon S3存储 我有一个叫做“资产”的模型,它属于“用户” 下面是Asset.rb中的前几行Ruby on rails 轨道:AWS S3和x2B;回形针:在AssetController中获取命名错误#创建,ruby-on-rails,amazon-web-services,paperclip,Ruby On Rails,Amazon Web Services,Paperclip,我正在尝试在我的rails应用程序中使用回形针设置Amazon S3存储 我有一个叫做“资产”的模型,它属于“用户” 下面是Asset.rb中的前几行 attr_accessible :user_id, :uploaded_file belongs_to :user #set up "uploaded_file" filed as attached_file(using paperclip) has_attached_file :uploaded_file, :
attr_accessible :user_id, :uploaded_file
belongs_to :user
#set up "uploaded_file" filed as attached_file(using paperclip)
has_attached_file :uploaded_file,
:path => "assets/:id/:basename.:extension",
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/amazon_s3.yml",
:bucket => "XXXXX"
validates_attachment_size :uploaded_file, :less_than => 1000.megabytes
validates_attachment_presence :uploaded_file
加载视图时,我收到一个错误:
NoMethodError in AssetsController#create
undefined method `symbolize_keys' for #<String:0x00000103939258>
AssetController中的命名错误#创建
未定义的方法“符号化密钥”#
这意味着什么。它与“Asset.rb”中的这一行有关
:s3_credentials=>“#{Rails.root}/config/amazon_s3.yml”
我在网上查阅了一些关于Rails\u ROOT如何被弃用的讨论,因此我改用Rails.ROOT。仍然得到这个错误
此外,我还在amazon_s3.yml配置文件中存储AWS密钥和密码
这不是最好的做法,所以如果有人有任何其他想法,我很乐意听到他们。heroku在他们的网站上说要把这些变量作为环境变量,但是,我不确定我会如何在heroku上设置这些变量,当我在本地开发机器上时又会怎样呢?那怎么办
我只是有点困惑,所以想看看是否有一个完整的例子或教程的地方。我只能找到不推荐的设置
谢谢你,这对我来说是怎样的(适应了你的情况):
请注意
s3\u credetials.yml
添加到.gitignore
ENV
变量:回形针存储\u选项的值更改为{}
。然后文件将存储在本地(例如,用于测试)
脱离主题,但它可能很有用:如果您想读取文件-
@asset.uploaded\u file.s3\u object.read
您称为create的回溯/位置是什么样子的?您好,谢谢您的回答。我有一个问题:我以前的“environments/development.rb”中有一行:“Paperclip.options[:command\u path]=”/usr/local/bin/”“我应该在这行后面添加建议行:“Paperclip\u STORAGE\u options={……}还是替换它。谢谢这不起作用。我收到了这个错误”路由错误未初始化常量资源::回形针存储选项“添加之前或之后:无所谓。我只是重新检查了一下:对我来说也一样。您是否尝试重新启动服务器?确保您在配置中写入了相同的常量名称,或者启动了哪个环境,或者将配置放在了哪里。。。标准调试过程。但我不知道你为什么会遇到路由错误。奇怪的是,也许这是个错误。
#Asset.rb
has_attached_file :uploaded_file, {
:path => "assets/:id/:basename.:extension"
}.merge(PAPERCLIP_STORAGE_OPTIONS)
#environments/development.rb and test.rb
PAPERCLIP_STORAGE_OPTIONS = {
:storage => :s3,
:bucket => "XXXX",
:s3_credentials => YAML.load_file("#{Rails.root}/config/s3_credentials.yml")
}
#environments/production.rb
PAPERCLIP_STORAGE_OPTIONS = {
:storage => :s3,
:bucket => ENV['S3_BUCKET_NAME'],
:s3_credentials => {
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
#config/s3_credentials.yml
access_key_id: "XXXX"
secret_access_key: "XXXX"