我对设计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真的没有意义.显然我在这里遗漏了一些东西.
在我看来,我有几个菜单选项,通过权限控制 - 即,不是每个人都可以看到"仪表板"视图.所以在我的菜单选项中,我有以下内容:
<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加载?
我把一个简单的例子放在一起,尝试使用一个基本的例子来证明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.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)
所以,
有一个非常类似的问题,但是我无法解决这个问题并且它没有回答我关于使用MRI Ruby的并发请求的所有问题.
Github项目:https://github.com/afrankel/limitedBandwidth(注意:项目正在考虑的不仅仅是服务器上的多进程/线程问题)
ruby multithreading ruby-on-rails multiprocessing ruby-on-rails-4
在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(以便我可以突出显示它)?
我正在构建一个应用程序,它被构建为一个Rails服务器应用程序,为客户端提供RESTful api.Rails服务器使用RABL.客户端是一个Angular JS客户端,执行标准的$ http调用(获取,放置等).
偶尔我的Rails服务器会产生一个错误(假设附加到对象的验证错误)甚至没有错误,在这种情况下我想向用户显示一些东西 - 错误例如,"记录没有保存,因为...... "或"记录已成功更新".
我试图在Rails端和Angular /客户端都映射出一个模式来处理这个问题.
至于Rails:
至于Angular:
我想我希望我不必在这里重新发明轮子,有人可以指出我目前使用和建议(和本地化)的模式.
我想通过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井可以通过浏览器开发人员的工具轻松解决.所以我仍然在寻找一个可靠的解决方案.
我需要将我的rails 3应用程序与谷歌日历集成.以下是该应用的要求:
起初我以为我应该将谷歌日历带入我的应用程序(直接进入div),但随后#4我真的需要更多.
我找到了以下 http://cookingandcoding.com/docs/gcal4ruby/(用于API集成)
和
http://www.web-delicious.com/jquery-plugins-demo/wdCalendar/sample.php (用于日历的可视化显示)
在我走这条路之前,我想看看其他人是否对此有所了解.我最关心的是如何构建这个解决方案,具体来说:
这些架构是否适合这种架构?
此外,我认为我需要使用omniauth,以便我不必存储用户谷歌日历用户名和密码.
假设我的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
当我使用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
我可以使用omniauth(oauth NOT openid)和devise.rb配置这样的设计:
config.omniauth :google, KEY, SECRET
Run Code Online (Sandbox Code Playgroud)
并且它正确地重定向到谷歌询问权限(并返回)...
但不幸的是,它总是那样做.应该(我相信)知道我刚刚授权使用谷歌,并且应该在第一次之后跳过重定向谷歌.有关如何使这项工作的任何建议?
我正在谈论的许可是:"网站blah.com要求访问您的Google帐户以获取下面列出的产品".我不希望这个页面总是重新出现.