我正在切换到我编写的rails应用程序中的新aws-sdk,并且在我的生活中找不到在v2 sdk中使用相应的方法.我也遇到访问被拒绝的问题,我无法解决.
我使用v1 sdk的方式是用户使用"uploads"命名空间密钥直接上传到s3,在他们创建了他们正在处理的对象之后,回调将文件移动到longterm密钥并删除旧密钥.这是一个例子:
def move_file
old_key = s3_key
new_key = "#{self.class.table_name}/#{id}/#{Digest::SHA1.hexdigest([Time.now, rand].join)}/#{filename}"
AWS.config(access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], region: 'us-east-1')
s3 = AWS::S3.new
bucket_name = ENV['AWS_S3_BUCKET']
bucket = s3.buckets[bucket_name]
object = bucket.objects[old_key]
begin
object.move_to new_key, :acl => :public_read
rescue AWS::S3::Errors::NoSuchKey
errors.add(:base, "Oops! Something went wrong uploading your file. Please try again, and if the problem persists, open a trouble ticket.")
end
if !bucket.objects[old_key].exists? && bucket.objects[new_key].exists?
update_column(:s3_key, new_key)
end
end
Run Code Online (Sandbox Code Playgroud)
效果很好,但现在我正在尝试更新到新的sdk.我一直在努力的是:
def move_file
old_key = file
new_key = "#{self.class.table_name}/#{id}/#{Digest::SHA1.hexdigest([Time.now, rand].join)}/#{filename}"
s3 = …Run Code Online (Sandbox Code Playgroud) 我需要深入了解Ruby程序的构建.我正在努力学习如何编写Ruby(独立于Rails),因此我将我在bioinformtatics项目中编写的一些Perl脚本翻译成Ruby代码.基本上创建有用和诸如此类的类.
我的问题是如何执行它?Perl脚本只是一长串命令,一个接一个.什么适合Ruby?我应该在他们自己的.rb文件中定义我的类,并在一个单独的rb文件中调用它们和它们的方法,它们使用它们来执行我的程序吗?
通常做什么?任何例子都会被大大贬低.我也很感激有关如何学习这类东西的一般提示.
我在轨道上的ruby中有两个对象数组.我想将它们组合起来并按两个不同的属性对它们进行排序.这可能吗?
一个是'Post'记录数组,一个是'Talk'记录数组.它们都需要按日期排序.但对于Post,相关属性是created_at,而对于Talk,它是date_given.这种令人头疼的问题让我考虑消除两种不同的模型,并用更灵活的Post模型替换它们.
任何想法将不胜感激.
我在两个模型之间有一个has_one/belongs_to关联 - > User和ContactCard.虽然我能够为用户创建联系人卡片,但每当我尝试编辑卡片时,都会从ContactCardsController调用创建操作而不是更新(我可以告诉因为我在每个卡片上都有不同的成功消息).它改变了联系卡的属性,我不得不说.我很高兴它正在工作,但宁愿修补我对铁路路径和关联的理解上的任何差距.我错过了什么?为什么不使用我期望的动作?另外,如果你知道网上或github上有任何相关的例子,我可以研究,我全都听见了.谢谢!
联系卡控制器......
class ContactCardsController < ApplicationController
def create
current_user.build_contact_card(params[:contact_card])
if current_user.contact_card.save
flash[:success] = "Contact Card created!"
redirect_to '/account'
else
flash[:error] = "Fail!"
redirect_to '/account'
end
end
def update
if current_user.contact_card.update_attributes(params[:contact_card])
flash[:success] = "Profile updated."
redirect_to '/account'
else
flash[:error] = "Fail!"
redirect_to '/account'
end
end
Run Code Online (Sandbox Code Playgroud)
链接到编辑表单...
<%= link_to "Edit Profile", edit_user_contact_card_path(current_user) %>
Run Code Online (Sandbox Code Playgroud)
编辑表格......
<%= form_for [current_user, current_user.build_contact_card], :url => user_contact_card_path(current_user) do |f| %>
<%= f.label :first_name %>
<%= f.text_field :first_name %>
<%= f.label :last_name %>
<%= f.text_field :last_name …Run Code Online (Sandbox Code Playgroud) 在与heroku搏斗了大约一个星期并经过各种障碍以使其工作(新手的障碍,我绝对没有错误heroku)我终于让我的应用程序运行.我必须调整的其中一个步骤是预编译我的资产
bundle exec rake assets:precompile
Run Code Online (Sandbox Code Playgroud)
并对production.rb中的生产环境进行一些更改......
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = true
Run Code Online (Sandbox Code Playgroud)
不幸的是,这打破了我本地网站上的一些js行为.但是在heroku上运行正常.我一直在处理这个问题的方法是将我的本地副本回滚到这些更改之前的某个点,但我想知道为什么它会破坏.还有一个资产:decomplile?基本上怎么会扭转极性或其他什么呢?我肯定会尝试与资产管道建立更密切的联系,但与此同时,任何帮助或见解都会受到极大的欢迎.
我需要帮助通过客户端jQuery上传表单向亚马逊提供内容类型.我需要添加内容类型,因为我上传的音频文件不会在jPlayer中播放ie10除非内容类型设置正确.我使用了pjambet的博客文章 - http://pjambet.github.io/blog/direct-upload-to-s3/来启动和运行(优秀的文章顺便说一句).看来,字段的顺序非常重要.我一直试图插入一个隐藏的输入标签,或者说是相关的内容类型(我认为是音频/ mpeg3),或者是空白,以便我的上传脚本填充.没运气.添加额外字段时上传会挂起.
直接上载form.html.erb
<form accept-charset="UTF-8" action="http://my_bucket.s3.amazonaws.com" class="direct-upload" enctype="multipart/form-data" method="post"><div style="margin:0;padding:0;display:inline"></div>
<%= hidden_field_tag :key, "${filename}" %>
<%= hidden_field_tag "AWSAccessKeyId", ENV['AWS_ACCESS_KEY_ID'] %>
<%= hidden_field_tag :acl, 'public-read' %>
<%= hidden_field_tag :policy %>
<%= hidden_field_tag :signature %>
<%= hidden_field_tag :success_action_status, "201" %>
<%= file_field_tag :file %>
<div class="row-fluid">
<div class="progress hide span8">
<div class="bar"></div>
</div>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
音频upload.js
$(function() {
$('input[type="submit"]').attr("disabled","true");
$('input[type="submit"]').val("Please upload audio first");
if($('#demo_audio').val() != ''){
var filename = $('#demo_audio').val().split('/').pop().split('%2F').pop();
$('#file_status').removeClass('label-info').addClass('label-success').html(filename + ' upload complete');
}
$('.direct-upload').each(function() {
var …Run Code Online (Sandbox Code Playgroud)