我正在尝试使用Rails 3.2.3安装mysql2 gem并且它失败了:
? bundle install
Fetching gem metadata from https://rubygems.org/.........
Using rake (0.9.2.2)
Using i18n (0.6.0)
Using multi_json (1.2.0)
Using activesupport (3.2.3)
Using builder (3.0.0)
Using activemodel (3.2.3)
Using erubis (2.7.0)
Using journey (1.0.3)
Using rack (1.4.1)
Using rack-cache (1.2)
Using rack-test (0.6.1)
Using hike (1.2.1)
Using tilt (1.3.3)
Using sprockets (2.1.2)
Using actionpack (3.2.3)
Using mime-types (1.18)
Using polyglot (0.3.3)
Using treetop (1.4.10)
Using mail (2.4.4)
Using actionmailer (3.2.3)
Using arel (3.0.2)
Using tzinfo (0.3.32)
Using activerecord (3.2.3) …Run Code Online (Sandbox Code Playgroud) 直到昨天,jQuery在我的Rails应用程序中加载得很好.我正在玩安装debugger/ruby-debug gem.您可能已经意识到Rails 3中的调试器gem存在问题,但我没有成功安装依赖项,因此我从Gemfile中删除了gem.从那时起加载我的网站jQuery没有加载.这些是我在控制台中看到的消息:
assets/jquery_ujs.js?body=1:377Uncaught ReferenceError: jQuery is not defined
bootstrap-transition.js:24Uncaught TypeError: undefined is not a function
bootstrap.js:3Uncaught ReferenceError: jQuery is not defined
welcome:210Uncaught ReferenceError: $ is not defined
Run Code Online (Sandbox Code Playgroud)
这是我的application.js文件:
//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
如果我在layouts/application.html.erb中显式加载jQuery,就像这样,它可以工作:
<%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" %>
<%= javascript_include_tag "application" %>
Run Code Online (Sandbox Code Playgroud)
有什么想法我可以做什么来解决这个并再次加载jQuery?查看.rvm/gems/ruby-1.9.3-p125/gems/jquery-rails-2.0.2/vendor/assets/javascripts我可以看到jquery.js和jquery.min.js仍在那里.
我无法使用S3 IAM策略使用Paperclip上传.我甚至遇到直接jQuery上传的问题(没有Paperclip).我的方案如下,我有一个应用程序,将有许多网站.每个站点都有自己的桶,应该只能访问自己的桶,没有其他人可以访问.该IAM示例策略文档解释正是我想在做"范例:允许水桶到一个文件夹的每个IAM用户访问".我为应用程序设置了一个IAM组,并且该组中的每个站点都有一个用户.这些IAM用户属于该组.该小组的政策如下:
{
"Version":"2012-10-17",
"Statement":[{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::my-app/${aws:username}/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这是我在存储桶上的CORS配置,当然,dev会在以后被锁定:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
这是我的Paperclip设置:
has_attached_file :background_image,
storage: :s3,
s3_credentials: {
access_key_id: "xxx",
secret_access_key: "xxx"
},
bucket: "my-app",
s3_permissions: "public-read",
path: "/background_images/:id/:filename"
Run Code Online (Sandbox Code Playgroud)
我以前在使用策略时直接使用策略,这确实有效,但是当我进入具有许多"站点"的生产环境时,它不像我需要的那样灵活.据我所知,我已完全遵循文档,但我所做的任何事都会导致"访问被拒绝".此时我甚至不确定我的问题是我的IAM策略还是我的Paperclip配置.
编辑:澄清.
编辑2:最终解决方案
这是我基于这篇文章的最终IAM政策:
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow", …Run Code Online (Sandbox Code Playgroud) ruby-on-rails amazon-s3 paperclip amazon-web-services amazon-iam
我正在Rails 3.2应用程序中实现jQuery文件上载插件,我收到此错误消息:
Uncaught TypeError: Cannot call method '_adjustMaxNumberOfFiles' of undefined
以下是调用_adjustMaxNumberOfFiles的代码:
$(function () {
// Initialize the jQuery File Upload widget:
$('#fileupload').fileupload(
{
url: '/photos', // post to and retrieve from
dataType: 'json'
}
);
// Load existing files:
$.getJSON($('#fileupload').prop('action'), function (files) {
var fu = $('#fileupload').data('fileupload'),
files = jQuery.grep(files, function (a) { return a.gallery_id == <%= params[:id] %>; }), //filter the photos down to this gallery
template;
fu._adjustMaxNumberOfFiles(-files.length);
template = fu._renderDownload(files).appendTo($('#fileupload .files'));
// Force reflow:
fu._reflow = …Run Code Online (Sandbox Code Playgroud) 每个租户都有自己的照片库,可以在Amazon S3上存储照片.看作S3对我来说相对较新,我正在寻找一些关于如何在存储桶,IAM组/用户,安全性,使用情况报告以及可能的计费方面进行管理的建议和最佳实践.
我看到它的方式是我有两个选择.
选项1: 一个主桶.每个租户都有一个存储照片的子目录.我将为整个应用程序创建一个IAM组,并为每个租户创建一个新的IAM用户,只能访问他们的子目录.将来,如果我想知道租户使用多少S3空间,那么很容易报告?我是否希望为每个租户提供唯一的AWS访问密钥和密钥,即使他们要访问同一个存储桶?
选项2: 每个租户都有自己的桶.每个租户都会获得自己的IAM用户,只能访问他们的存储桶.此选项是否更适合报告使用情况?
一般的问题:
我正在运行Rails 4.2,Devise 3.4.1和CanCan 1.6.10.当我尝试通过标准删除按钮删除资源时,如下所示,我退出并重定向到登录页面.
<a data-confirm="Are you sure?" class="btn-alert" rel="nofollow" data-method="delete" href="/admin/lots/6">Delete</a>
我的开发日志告诉我这是因为它"无法验证CSRF令牌的真实性".我似乎能够让它工作的唯一方法是从删除按钮更改为发布到删除操作的表单,但这有点愚蠢.我在其他Rails 4应用程序中完成了这个,所以我很确定我做得对.
index.html.erb
<% if can? :destroy, lot %>
<%= link_to "Delete", admin_lot_path(lot.id), method: :delete, data: {confirm: "Are you sure?"}, class: 'btn-alert' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
lots_controller.rb
class Admin::LotsController < ApplicationController
before_filter :authenticate_user!
load_and_authorize_resource
def destroy
@lot.destroy
redirect_to admin_lots_path, notice: "Lot was successfully removed."
end
end`
Run Code Online (Sandbox Code Playgroud)
就像我说的那样,用表格替换按钮似乎有效,但这并不理想.
<%= form_for([:admin, lot], method: :delete) do |f| %>
<%= f.submit value: "Delete", class: 'btn-standard', data: {confirm: "Are you sure?"} %>
<% …Run Code Online (Sandbox Code Playgroud) 使用Capybara我不能为我的生活选择我的表格上的复选框.
在我的请求规范中,我尝试过:
check("First Name")
page.check("First Name")
page.check("pickem_option_ids_10")
find(:css, "#pickem_option_ids_11[value='11']").set(true)
find(:css, "#pickem_option_ids_11").set(true)
Run Code Online (Sandbox Code Playgroud)
我的表单片段:
<div class="control-group check_boxes optional">
<label class="check_boxes optional control-label">Options:</label>
<div class="controls">
<label class="checkbox">
<input class="check_boxes optional" id="pickem_option_ids_10" name="pickem[option_ids][]" type="checkbox" value="10" />First Name
</label>
<label class="checkbox">
<input class="check_boxes optional" id="pickem_option_ids_11" name="pickem[option_ids][]" type="checkbox" value="11" />Middle Name
</label>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我从这个SO线程中得到了一些find()想法.
我在其他规格中取得了一些成功,我有一个标签为Active的复选框,我只想说check("Active").
amazon-s3 ×2
amazon-iam ×1
capybara ×1
devise ×1
javascript ×1
jquery ×1
mysql ×1
mysql2 ×1
paperclip ×1
rspec ×1