小编Ale*_*lex的帖子

是否有S3策略限制访问只能查看/访问一个存储桶?

我有一个简单的桶,看起来像images.mysite.com我的S3和其他包含备份等的桶.

我想允许特定用户访问images.mysite.com存储桶以上传图像.但是,我不希望他看到任何其他的桶; 甚至不存在它们.

我无法制定这样做的政策; 每当我尝试限制性的东西时,它最终会阻止任何桶的列表.

policy amazon-s3 bucket

115
推荐指数
7
解决办法
9万
查看次数

如何使用MongoDB和Mongoid在Rails 3上进行适当的数据库测试(TDD)

如何通过Mongoid on Rails使用MongoDB编写适当的单元测试(以及针对该问题的集成测试)?

我问,因为与使用让我们说SQLite3相反,即使在运行测试时,我所做的一切仍然存在.所以目前我正在编写创建测试,然后手动删除我所做的一切.但是对于集成测试而言,它变得烦人甚至复杂.

我做的样本:

before(:each) do
  @user = User.create!(@attr)
end

after(:each) do
  # MongoDB is not a transactional DB, so added objects (create) during tests can't be rollbacked
  # checking for the existance of a similar object with exact :name and :email (regex make it case insensitive)
  cleanup = User.where(:name => "Example User", :email => /^user@example.com/i)
  cleanup.destroy unless cleanup.nil?
end
Run Code Online (Sandbox Code Playgroud)

知道如何在测试期间使MongoDB不持久吗?(我甚至无法在沙箱模式下运行控制台,因为使用Mongoid我必须停用Active Record).

testing persistence ruby-on-rails mongodb mongoid

19
推荐指数
3
解决办法
5835
查看次数

我可以使用link_to生成内部跨度的链接吗?

我基本上试图得到这个结果:

        <a href="#" class="button small-button green-button">
            Log in
            <span class="button-right"></span>
        </a>
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用rails 3中的link_to来做到这一点?

ruby-on-rails href hyperlink link-to

19
推荐指数
1
解决办法
1万
查看次数

设计:在特定情况下是否可以不发送确认电子邮件?(即使确认活动时)

这是我的情况,我使用设计允许用户在我的网站上创建帐户并管理他们的身份验证.在注册过程中,我允许客户更改一些选项,从而导致创建一个实际上不同的帐户,但仍然基于相同的核心用户资源.我想选择不发送某些帐户类型的确认电子邮件.我不在乎帐户是否未得到确认且用户无法登录,这没关系,没有pb.我该怎么做呢?谢谢,亚历克斯

ruby email confirmation devise

14
推荐指数
5
解决办法
9237
查看次数

覆盖Devise的注册控制器,以便在sign_up成功完成后允许重定向

我到处都看了一眼,发现了很多信息...但是没有什么对我有用而且我没有得到它:(

我知道你应该覆盖注册控制器,如下所示:

class Users::RegistrationsController < Devise::RegistrationsController

def after_sign_up_path_for(resource)
  authors_waiting_path
end 

end
Run Code Online (Sandbox Code Playgroud)

然后按照Tony Amoyal http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-andcancan-customizing-devise-controllers/显示的例子,我应该改变我的路线更新新控制器的访问权限:

devise_for :users, :controllers => { :registrations => "users/registrations" } do
#get '/author/sign_up', :to => 'devise/registrations#new'
#get '/client/sign_up', :to => 'devise/registrations#new'  
get '/author/sign_up', :to => 'users/registrations#new'
get '/client/sign_up', :to => 'users/registrations#new'      
end
Run Code Online (Sandbox Code Playgroud)

是的,我在这里有点奇怪,因为我正在捕捉一些特定的路径将它们发送到注册页面,这使我能够有效地创建2个注册场景.在我覆盖注册控制器之前,我评论了我的内容.

即使所有这些和我的authors_waiting_path是一个有效的路径,它只是在注册后继续进入登录页面:(

这真令人沮丧.

亚历克斯

编辑:我也在设计维基上找到了这个:https://github.com/plataformatec/devise/wiki/How-To : -Redirect- after-registration-(sign- up)

但我不知道在哪里定义这个创建方法?我应该覆盖会话控制器???

编辑2:

我把控制器的虚拟覆盖:

  class Pouets::RegistrationsController < Devise::RegistrationsController

    def after_sign_up_path_for(resource)
      authors_waiting_path
    end 

    def new
      super
    end

    def create
      puts "was here"
      super
    end …
Run Code Online (Sandbox Code Playgroud)

overriding ruby-on-rails registration devise

10
推荐指数
1
解决办法
2万
查看次数

Mongoid:如何仅通过引用加载延迟加载的对象的某些字段?

出于性能原因,我only()在编写mongoid查询时尽可能多地使用关键字来指定我要加载的字段.

通常的嫌疑人,例如,当我想要所有管理员的用户电子邮件仅用于显示目的时.

我会写:

User.where(:groups => :admins).only(:email).each do |u|
 puts u.email
end
Run Code Online (Sandbox Code Playgroud)

我这样做是因为我的用户模型中充满了很多数据,在列出一堆电子邮件时我很乐意忽略这些数据.

但是,现在让我们想象一下,我的用户是通过Project模型引用的,因此对于我可以做的每个项目:project.user.由于mongoid的延迟加载,我的对象用户只有在调用引用时才会被实例化(并从数据库中查询).

但是,如果我想列出所有管理项目所有者的所有电子邮件呢?

我会写这个:

Project.where(:admin_type => true).each do |p|
  puts p.user.email
end
Run Code Online (Sandbox Code Playgroud)

这里的主要问题是,这样做,我为每个项目加载整个用户对象,如果有很多项目匹配查询可能会变得非常沉重.那么我该如何只加载电子邮件呢?

我能做到这一点:

User.where(:_id => p.user_id).only(:email).first.email
Run Code Online (Sandbox Code Playgroud)

但这显然打败了简单做法的好语法的目的:

p.user.email 
Run Code Online (Sandbox Code Playgroud)

我希望我能写出类似的东西:p.user.only(:email).email但我不能.有任何想法吗 ?

亚历克斯

lazy-loading model-associations mongoid ruby-on-rails-3

10
推荐指数
1
解决办法
3230
查看次数

Mongoid - 阵列管理?插入唯一值,如果存在则删除值?

我想做一些相当简单的事情我相信:

1)仅当该值尚未存在时才在数组字段中插入值

2)删除数组中存在的值

我只是不知道如何做这些事情......目前我只是插入我的值而不检查它是否已经存在:myArray << obj.id

谢谢,

亚历克斯

ps:使用Rails 3.0.3,mongo 1.1.5和mongoid 2.0.0.rc5

ps2:这是实现我想要的mongodb语法,但我不知道如何在mongoid中做到这一点

{ $addToSet : { field : value } }
Run Code Online (Sandbox Code Playgroud)

仅当数组不在数组中时才添加值,如果field是现有数组,否则在字段不存在时将字段设置为数组值.如果字段存在但不是数组,则会引发错误情况.

添加许多valuest.update

{ $addToSet : { a : { $each : [ 3 , 5 , 6 ] } } }
$pop

{ $pop : { field : 1  } }
Run Code Online (Sandbox Code Playgroud)

删除数组中的最后一个元素(1.1中的ADDED)

{ $pop : { field : -1  } }
Run Code Online (Sandbox Code Playgroud)

删除数组中的第一个元素(1.1中的ADDED)|

arrays ruby-on-rails mongodb mongoid

7
推荐指数
2
解决办法
9315
查看次数

Rails 3:如何检测应用程序是否在服务器模式下运行多个不同的环境?

我有一个在多个服务器上运行的应用程序: - 在开发机器上本地 - 在heroku上 - 在Nginx上使用Passanger的特定服务器上

我试图启动一个特定的代码(加载一些REDIS密钥),只有在启动Web服务器时才需要.

我已经做了很多挖掘,我发现最好的解决方案是在初始化程序中执行我的代码:

if defined?(Rails::Server)
   #my code
end
Run Code Online (Sandbox Code Playgroud)

这在本地运行良好,但似乎Rails :: Server永远不会在Heroku或Passanger上定义.

我需要一个适用于所有情况的解决方案,请帮助,这非常重要.

谢谢,

亚历克斯

ps:我正在运行Rails 3.0.4,Ruby 1.8.7

initialization ruby-on-rails heroku

7
推荐指数
2
解决办法
1333
查看次数

Ruby:生产环境中的GC :: Profiler.enable会导致性能问题吗?

可以在生产环境中激活ruby 1.9.2中的GC :: Profiler会导致性能问题吗?在性能关键的生产应用程序中使用它是否安全?

ruby memory profiling ruby-on-rails-3

7
推荐指数
1
解决办法
1290
查看次数

使用mongdb更新简单的布尔数据?

我正在使用Rails和mongoid与mongodb一起工作.

使用Active:Record时,通常在rails中,您可以访问方法.toggle!它只允许您反转数据库中布尔字段的值.

不幸的是,这种方法不适用于mongoDB:

user = User.first
user.toggle!(:admin)
NoMethodError: undefined method `toggle!' for #<User:0x00000100eee700>
Run Code Online (Sandbox Code Playgroud)

这是不幸的......而且愚蠢到我没有看到如何在没有复杂代码的情况下出行......

关于如何简明扼要地获得相同结果的任何建议?

谢谢,

亚历克斯

PS:还存在的问题之一是,当我要修改字段,它经历再次验证...并且它要求的:密码,我不会在数据库保存,那么:

User.first.admin = !User.first.admin
Run Code Online (Sandbox Code Playgroud)

甚至不会工作:(

boolean ruby-on-rails toggle mongodb mongoid

6
推荐指数
1
解决办法
1405
查看次数