小编Art*_*kel的帖子

设计记住我和会话

我对设计gem配置设置感到困惑:

  # The time the user will be remembered without asking for credentials again.
  config.remember_for = 2.weeks

  # The time you want to timeout the user session without activity. After this
  # time the user will be asked for credentials again.
  config.timeout_in = 10.minutes
Run Code Online (Sandbox Code Playgroud)

我想让用户选中"记住我"复选框(即让我保持登录状态),但默认会话超时为10分钟.10分钟后,它要求我再次登录,即使我点击了"记住我".如果这是真的那么remember_for真的没有意义.显然我在这里遗漏了一些东西.

session ruby-on-rails devise

42
推荐指数
3
解决办法
2万
查看次数

等到范围变量加载后再在angular.js的视图中使用它

我已经看过这个这个,但似乎可能有一个更简单的方法.

在我看来,我有几个菜单选项,通过权限控制 - 即,不是每个人都可以看到"仪表板"视图.所以在我的菜单选项中,我有以下内容:

<li ng-show="validatePermission('Dashboard')">Dashboard</li>
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我定义了validatePermission方法,它正在查看当前用户的权限.例如:

  $scope.validatePermission = function(objectName) {
    if $scope.allPermissions......
Run Code Online (Sandbox Code Playgroud)

同样在我的控制器中,我通过$ http调用加载这些权限:

  $http.get('permissions/' + userid + '.json').success(function(data) {  
    $scope.allPermissions = data;....
Run Code Online (Sandbox Code Playgroud)

问题是$ scope.allPermissions在视图调用validatePermission之前没有加载.如何在视图呈现之前等待allPermissions加载?

promise angularjs

31
推荐指数
3
解决办法
10万
查看次数

MRI Ruby的并发请求

我把一个简单的例子放在一起,尝试使用一个基本的例子来证明Rails中的并发请求.请注意,我使用的是MRI Ruby2和Rails 4.2.

  def api_call
    sleep(10)
    render :json => "done"
  end
Run Code Online (Sandbox Code Playgroud)

然后我在我的Mac(I7/4 Core)上的Chrome中找到4个不同的选项卡,看看它们是以串行还是并行方式运行(真正并发的是关闭但不是同一个东西).即,http:// localhost:3000/api_call

我不能使用Puma,Thin或Unicorn来使用它.每个请求都是串联的.10秒之后的第一个标签,20之后的第二个标签(因为它必须等待第一个完成),之后是第三个....

从我所读到的,我相信以下是真实的(请纠正我)并且是我的结果:

  • Unicorn是多进程的,我的例子应该有效(在定义unicorn.rb配置文件中的worker数量之后),但事实并非如此.我可以看到4名工人开始,但一切都在串联.我正在使用unicorn-rails gem,使用unicorn -c config/unicorn.rb启动rails,在我的unicorn.rb中我有:

- unicorn.rb

worker_processes 4
preload_app true
timeout 30
listen 3000
after_fork do |server, worker|
  ActiveRecord::Base.establish_connection
end
Run Code Online (Sandbox Code Playgroud)
  • Thin和Puma是多线程的(虽然Puma至少有一个' 集群 '模式,你可以使用-w参数启动worker)并且不应该使用MRI Ruby2.0无论如何(在多线程模式下),因为"有一个全局解释器锁(GIL)确保一次只能运行一个线程".

所以,

  • 我有一个有效的例子(或使用睡眠错误)?
  • 我上面关于多进程和多线程(关于MRI Rails 2)的陈述是否正确?
  • 关于为何我无法使用Unicorn(或任何服务器)的任何想法?

有一个非常类似的问题,但是我无法解决这个问题并且它没有回答我关于使用MRI Ruby的并发请求的所有问题.

Github项目:https://github.com/afrankel/limitedBandwidth(注意:项目正在考虑的不仅仅是服务器上的多进程/线程问题)

ruby multithreading ruby-on-rails multiprocessing ruby-on-rails-4

26
推荐指数
1
解决办法
3743
查看次数

Fullcalendar - 根据事件选择突出显示一天

在fullcalendar中,您可以选择事件(触发)eventClick函数/回调.我想要做的是突出显示事件发生的那一天(在月视图中).

例如,如果事件是在10月30日,我选择了该事件,我希望突出显示当天的背景颜色.这与fullcalendar处理"今天"的方式非常相似,今天它以黄色突出显示.

我似乎无法弄清楚如何将fc-event类或事件对象本身绑定到日历中的实际日div.我的10月30日活动出现在以下div中(即10月30日的方框):

<div class="fc-sun fc-widget-content fc-day35 fc-first">
Run Code Online (Sandbox Code Playgroud)

如何基于事件对象找到这个div(以便我可以突出显示它)?

css jquery fullcalendar

14
推荐指数
2
解决办法
3万
查看次数

从Rails的JSON响应中寻找用于Angular中的通用错误处理的范例

我正在构建一个应用程序,它被构建为一个Rails服务器应用程序,为客户端提供RESTful api.Rails服务器使用RABL.客户端是一个Angular JS客户端,执行标准的$ http调用(获取,放置等).

偶尔我的Rails服务器会产生一个错误(假设附加到对象的验证错误)甚至没有错误,在这种情况下我想向用户显示一些东西 - 错误例如,"记录没有保存,因为...... "或"记录已成功更新".

我试图在Rails端和Angular /客户端都映射出一个模式来处理这个问题.

至于Rails:

  • 我当然可以在每个RABL文件中传回一个节点来包含错误数组
  • 我还可以通过在返回之前检入控制器来返回不同的RABL
  • 大多数建议使用HTTP代码(这是有道理的),按照这里 (虽然似乎没有成为代码的一致用途的东西,像一个验证错误).

至于Angular:

我想我希望我不必在这里重新发明轮子,有人可以指出我目前使用和建议(和本地化)的模式.

api error-handling json ruby-on-rails angularjs

13
推荐指数
1
解决办法
4068
查看次数

用于保护S3文档的Rails实现

我想通过rails app保护我的s3文件,如果我去:

www.myapp.com/attachment/5应在显示/下载文档之前对用户进行身份验证.

我已经在stackoverflow上读过类似的问题,但我不确定我是否看到了任何好的结论.

根据我的阅读,您可以采取一些措施来"保护"您的S3文档.

1)模糊URL.我做到了这一点.我认为这是一件好事,所以没有人可以猜到这个网址.例如,如果您的S3 URL明显,则可以轻松地"遍历"URL:https: //s3.amazonaws.com/myapp.com/attachments/1/document.doc.有一个URL,如:https: //s3.amazonaws.com/myapp.com/7ca/6ab/c9d/db2/727/f14/document.doc似乎好多了.这很好,但不能解决通过电子邮件或网站传递URL的问题.

2)使用如下所示的过期URL: Rails 3,paperclip + S3 - 如何存储实例并保护访问 对我而言,这不是一个很好的解决方案,因为URL是暴露的(即使只是很短的时间)并且另一个用户可能及时重用URL.您必须调整允许下载的时间,而不会提供太多的复制时间.这似乎是错误的解决方案.

3)通过应用程序代理文档下载.起初我尝试使用send_file:http: //www.therailsway.com/2009/2/22/file-downloads-done-right 但问题是这些文件只能是服务器上的静态/本地文件和不通过其他站点(S3/AWS)提供服务.但是,我可以使用send_data并将文档加载到我的应用程序中,并立即将文档提供给用户.这个解决方案的问题很明显 - 带宽的两倍和时间的两倍(将文档加载到我的应用程序然后再返回给用户).

我正在寻找一种能够提供#3完全安全性的解决方案,但不需要额外的带宽和时间来加载.看起来Basecamp正在"保护"他们应用程序背后的文档(通过身份验证),我认为其他网站正在做类似的事情,但我不认为他们正在使用我的#3解决方案.

建议将不胜感激.

更新:

我选择了第四个解决方案:

4)使用amazon存储桶策略来控制基于引用者的文件访问:http: //docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?UsingBucketPolicies.html

再次更新:

#4井可以通过浏览器开发人员的工具轻松解决.所以我仍然在寻找一个可靠的解决方案.

security obfuscation ruby-on-rails amazon-s3

11
推荐指数
1
解决办法
1783
查看次数

完整的谷歌日历与Rails 3网站集成

我需要将我的rails 3应用程序与谷歌日历集成.以下是该应用的要求:

  1. 在我的应用程序中,我可以创建日历活动并邀请人(几乎大多数谷歌日历功能).
  2. 我希望能够拉动用户现有的谷歌日历并同步?(可能).
  3. 我需要能够以不同的形式(每日,每周,每月)显示日历,并在日历中添加其他图形.
  4. 我需要使用日历中创建的项目来获取其他功能.具体来说,我需要跟踪数据库中包含某些内容的日历项目.例如,新约会的ID与我的数据库中用户的foo相关联.

起初我以为我应该将谷歌日历带入我的应用程序(直接进入div),但随后#4我真的需要更多.

我找到了以下 http://cookingandcoding.com/docs/gcal4ruby/(用于API集成)

http://www.web-delicious.com/jquery-plugins-demo/wdCalendar/sample.php (用于日历的可视化显示)

在我走这条路之前,我想看看其他人是否对此有所了解.我最关心的是如何构建这个解决方案,具体来说:

  • 让我们假设我使用上面列出的api专门为我的应用程序在谷歌日历中创建一个日历,并且我与这个单独的日历接口.
  • 我们还假设我可以在该日历中创建事件,从谷歌日历中获取ID,并将每个事件的ID放在我的数据库中(我需要存储它并引用我创建的特定事件).
  • 我还想从用户那里引入现有的日历(并重新同步它们).这个API能做到吗?

这些架构是否适合这种架构?

此外,我认为我需要使用omniauth,以便我不必存储用户谷歌日历用户名和密码.

calendar ruby-on-rails google-calendar-api

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

Zend插件使用什么目录?

假设我的ini文件中包含以下内容:

resources.frontController.plugins.auth = AuthPlugin
Run Code Online (Sandbox Code Playgroud)

应该在哪里放置AuthPlugin类?假设我想在控制器/插件下使用它.

更新:

根据以下建议,我仍然遇到麻烦.让我准确地说我现在拥有的东西:

1)application.ini的主要部分

includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.view[] =
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.plugins.authplugin.class = "AuthPlugin"
Run Code Online (Sandbox Code Playgroud)

2)我的Bootstrap.php什么都没有(我有很多东西,但仍然没有任何错误):

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
Run Code Online (Sandbox Code Playgroud)

3)我在application/plugins目录中有一个AuthPlugin.php类

class AuthPlugin extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
        { 
           // code here
        }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Fatal error: Class 'AuthPlugin' not found in C:\[my dir structure here]\Application\Resource\Frontcontroller.php on line 111
Run Code Online (Sandbox Code Playgroud)

我想我在这里遗漏了一些明显的东西.提前致谢.Zend Framework 1.10

php zend-framework

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

有条件地包括具有RABL的子节点

当我使用rabl返回标准RESTful控制器方法的JSON时,我想我有一个非常基本的情况......

首先让我说我与父母和孩子有一个典型的一对多关系(假设客户和账户):

class Customer < ActiveRecord::Base
  has_many :accounts
end
Run Code Online (Sandbox Code Playgroud)

在我的客户控制器中,我有索引和编辑 - 索引,我只想返回所有客户(没有帐户),并编辑我想要返回特定客户的所有帐户.使用索引我不想为明显的性能(N + 1)原因返回帐户.

在我的兔子里,我有以下几点:

#index.rabl (for listing all customers)
collection :@customers
extends "customers/_customer"
Run Code Online (Sandbox Code Playgroud)

#edit.rabl (for editing a single customer)
object :@customer
extends "customer/_customer"
Run Code Online (Sandbox Code Playgroud)

我正在重复使用_customer.rabl进行索引和编辑.

#_customer.rabl
object :@customer
attributes :name, ......

if @include_accounts
  child :accounts do
    extends "accounts/_account"
  end
end
Run Code Online (Sandbox Code Playgroud)

我在我的编辑(控制器)中设置了@include_accounts而不是索引 - 但是这不起作用 - 实际上这里的实例var(@include_accounts)永远不会传递下来.实现这个的正确模式是什么?

ruby-on-rails one-to-many ruby-on-rails-3 restful-architecture rabl

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

Google oauth通过设计和omniauth/oauth不断请求访问

我可以使用omniauth(oauth NOT openid)和devise.rb配置这样的设计:

config.omniauth :google, KEY, SECRET
Run Code Online (Sandbox Code Playgroud)

并且它正确地重定向到谷歌询问权限(并返回)...

但不幸的是,它总是那样做.应该(我相信)知道我刚刚授权使用谷歌,并且应该在第一次之后跳过重定向谷歌.有关如何使这项工作的任何建议?

我正在谈论的许可是:"网站blah.com要求访问您的Google帐户以获取下面列出的产品".我不希望这个页面总是重新出现.

ruby ruby-on-rails oauth devise omniauth

5
推荐指数
1
解决办法
5804
查看次数