为了使控制器特定的JavaScript逻辑不在标准范围内,application.js并且只有相关控制器包含它,我将它放在自己的.js文件中,并根据布局中的控制器名称包含它,如下所示:
<%= javascript_include_tag "application", params[:controller] %>
Run Code Online (Sandbox Code Playgroud)
这很好,但是当我将应用程序部署到生产环境时(我正在使用Capistrano并设置了预编译任务),资产管道不会预编译任何特定于控制器的JS文件.我认为这是因为我的实际JavaScript文件没有被application.js中的require指令引用.
如何在不将我的控制器特定JS移回application.js或从application.js显式引用它的情况下处理这个问题?
有没有办法告诉资产管道预编译其他列表文件?如何在生产中手动预编译特定文件?
更新
因为它证明,您可以在这里指定单个文件config/environments/production.rb:
config.assets.precompile += %w( achievements.js )
Run Code Online (Sandbox Code Playgroud)
...或者我只是继续前进,并为每个JavaScript文件任意添加它:
config.assets.precompile += %w( *.js )
Run Code Online (Sandbox Code Playgroud) 我似乎找不到使用GitHub的Mac桌面客户端(目前为1.2.13)执行'git pull upstream master'的选项.是否支持在命令行之外?
对于社交网站,我有来自您关注的人的活动活动,并且我想在短时间内将类似类型的活动分组在一起,以获得更紧凑的活动供稿.想象一下,当你快速接受几件事时,Facebook如何显示逗号分隔列表:'乔喜欢啤酒,足球和筹码.'
我理解在ActiveRecord Enumerable结果上使用group_by方法,但是需要做一些初始工作来填充我以后可以分组的属性.我的问题涉及以可以标记这些分组的方式存储活动数据,然后再次检索它们.
现在我有一个Activity模型,它是提交活动的用户和它链接到的项目之间的连接关联(在上面的例子中,假设'beer','football'和'chips'是a的记录像模型).除了"喜欢"之外还有其他活动类型(活动,保存收藏夹等).我正在考虑的是,随着这个关联的创建,在完成该类型的最后一次关联时进行检查,如果超过某个时间段,则增加一个"活动块"计数器,这是一部分活动模型.稍后,在渲染此活动Feed时,我可以按用户分组,然后键入,然后键入此活动块.
示例:假设在同一天内发布了2个更新块.用户在2:05喜欢2件事,之后在5:45喜欢3件事.在第三次更新(第二个块的开始)发生在5:45之后,模型检测到已经过了太多时间并且将其活动块计数器递增1,因此当通过a渲染它们时强制任何后续更新到新块中group_by电话:
2:05 Joe likes beer nuts and Hooters.
5:45 Joe likes couches, chips and salsa.
7:00 Joe is attending the Football Viewing Party At Joe's
Run Code Online (Sandbox Code Playgroud)
我的第一个问题:增加这样一个计数器的有效方法是什么?它不再是auto_increment,所以我能想到的最简单的事情是将最后一条记录作为参考点.但是,这不能来自检查该类型的最后一次更新的同一查询,因为稍后更新另一种类型可能已经接收到下一个计数器值.它们不一定是全球唯一的,但那会很好.
我想到的另一个整体策略是另一个名为ActivityBlock的模型,它将类似活动的组合在一起.在许多情况下,更新将自行隔离,因此为每个单独的活动创建一条记录似乎效率不高.
这些中的任何一个看起来都是一个可靠的策略
我的最后一个问题围绕着分页.既然我们正在处理块,那么在分页开始之前总是显示一定数量的条目就更难了.个别(隔离的)Activity更新或者当时的块应该只计为1,所以最低我的group_by层,我可以合并一个计数器来跟踪我显示的行数,但这意味着我不能再只进行一次数据库查询而只需指定一个限制语句.在我达到页面限制之前,有没有办法在不重复执行其他SQL查询的情况下仍然可以执行此操作?
这将是ActivityBlock模型方法的一个优点,因为我可以轻松地对其应用限制调用,并且块也可以包含自动增量计数器.
使用无服务器框架时,我在尝试为 lambda 的 S3 存储桶分配权限时遇到困难。
我有一个 lamba 函数,最终将 JSON 配置文件写入 S3 存储桶,我希望通过网络将其提供给应用程序。我最初单独设置了一个 S3 存储桶(不在 中serverless.yml),并且我的amba成功地在正确的 S3 存储桶中创建了文件,但当我将其部署到 AWS 时,出现“内部服务器错误”。我认为这是因为部署时设置的权限未授予它对存储桶的写入权限。
我有点不同意如何做到这一点。我已阅读此主题,例如,并尝试用serverless.yml以下内容补充我的内容:
provider:
name: aws
runtime: nodejs8.10
stage: dev
region: eu-west-1
iamRoleStatements:
- Effect: "Allow"
Action:
- "s3:PutObject"
Resource:
Fn::Join:
- ""
- - "arn:aws:s3:::"
- Ref: arn:aws:s3:::com.joostschuur.quizdata
Run Code Online (Sandbox Code Playgroud)
在本例中,arn:aws:s3:::com.joostschuur.quizdata是我设置的手动创建的 S3 存储桶,并且希望我部署的 lambda 具有写入权限。但是,这会导致部署错误:
CloudFormation 模板无效:模板格式错误:模板的资源块中未解析的资源依赖项 [arn:aws:s3:::com.joostschuur.quizdata]
如果有一种方法可以将所有 S3 设置放入 serverless.yml 中(即指定存储桶,指定其中的文件应可通过网络访问等),我也很乐意这样做。
建议?
amazon-s3 amazon-web-services aws-lambda serverless-framework
我需要了解如何充分利用推送通知系统.我阅读了苹果网站上的推送通知指南,但仍然不清楚某些事情.
可以说我有一台Windows PC和一台iPad.1)PC应配置成什么才能成为"提供者"?是否应将其配置为服务器,根据请求提供数据.2)提供商如何将令牌发送给APN?
使用推送通知系统的原因是我可以调用(tablereload数据)方法,以便它更新表,因为它有一些自定义图像作为其子视图添加,所以如果服务器端的某些条件是满足.
感谢阅读的人,希望得到任何反馈或帮助.
干杯,Ephist
我正在努力将片段缓存添加到已登录和匿名用户的Rails 3站点,并且需要根据整个站点中显示的内容何时更新来控制页面的某些部分何时到期.中途,我发现memcached不支持expire_fragment的regexp,所以现在我正在寻找方法.
对于匿名用户来说,这不是一个大问题.我创建缓存键,例如'frontpage-new-shows'或'schedule-weekly-forecast-10/24/10',并在Show模型中创建新条目时使用,或者在下周播出时播放通过扫地机进行修改.这很好用.
我的问题是登录的用户.他们每个人都有自己的自定义日程安排,所以我的密钥看起来像'schedule-user-jschuur-10/10/24',jschuur是帐户的用户名.我理解,使用基于日期的约定,它们会自然过期,但我还希望在当天(或周)的日程安排中显示相关更改的那一天显式过期缓存日程表的所有片段.
事实证明,memcached不能做我需要的那种通配符到期(schedule-user - .* - 10/10/24).这意味着我需要某种解决方案来存储在memcached中的中央查找键中发布的所有密钥,或者让Rails/Ruby在内部根据我发送给memcached的密钥在内部执行此操作.
我假设前者是更好的解决方案.我的问题是,我该如何以最有效的方式做到这一点,所以我不会把所有的时间都打破,而不是再次击中数据库.我可以在memcached中存储数组或散列,检索整个事情,如果匹配则循环,删除它们并将散列存储回来.听起来它可能适用于几百甚至一千个用户,但这真的是最好的方法吗?
有人已经解决了这个问题并发布了解决方案吗?
需要考虑的一件事是,我的几乎所有缓存都是在视图中使用语句完成的,面向ActiveRelations准备好的尚未触发的查询,如下所示:
<% if current_user %>
<% if current_user.saved_shows_count %>
<% cache "schedule-user-#{current_user.username}-#{(Time.now + 3.hours).to_date.end_of_week.strftime('%D')}" do %>
<% if @shows.any? %>
<%= render :partial => "schedule/schedule", :locals => { :shows => @shows } %>
<% end %>
<% end %>
...
Run Code Online (Sandbox Code Playgroud)
该网站托管在Heroku上,我使用dalli gem作为客户端.
activerecord ×1
amazon-s3 ×1
aws-lambda ×1
git ×1
github ×1
group-by ×1
iphone ×1
memcached ×1