什么是在Web应用程序背后实施管理界面的普遍共识?请注意,我不是在寻找类似于Merb,RailsAdmin,Typus或其他类似的管理生成器.
我想知道以下内容:
产品belogs_to类别.一个类别has_many产品
我需要一个包含optgroup标签的select标签.
所以基本上,我需要我的HTML标记类似于伪代码:
<select name="product" class="products">
<option value=""></option>
<optgroup label="Cheese">
<option value="1">cheese 1</option>
<option value="2">cheese 2</option>
<option value="3">cheese 3</option>
</optgroup>
<optgroup label="Juices">
<option value="3">juice 1</option>
<option value="4">juice 2</option>
<option value="5">juice 3</option>
</optgroup>
</select>
Run Code Online (Sandbox Code Playgroud)
基于我的模型,我如何生成要放入grouped_options_for_select的数组?例如,生成groups_options的最佳方法是什么?
<%= select_tag 'product', grouped_options_for_select(grouped_options), :include_blank => true , :id => nil, :class => 'product' %>
Run Code Online (Sandbox Code Playgroud) 当用户上传文件时.在Rails 3.0+中,这些将进入公共/上传.3.1,上传的文件应该转到app/assets/uploads吗?还是在公共/上传?
在我们的环境中,这不是一个真正的问题,因为我们正在使用S3.只是想了解Rails 3.1的新目录结构.
你的想法是什么?
我有一个Rails应用程序,我正在尝试将Rails引擎集成到.
主机应用程序有一些捕获所有路线:
# magic urls
match '/' => 'admin/rendering#show'
match '*path/edit' => 'admin/rendering#show', :defaults => { :editing => true }
match '*path' => 'admin/rendering#show'
Run Code Online (Sandbox Code Playgroud)
看起来应用程序捕获所有路由后加载引擎路由.
/sitemap.xml(.:format) {:format=>"xml", :controller=>"admin/sitemaps", :action=>"show"}
/(.:format) {:controller=>"admin/rendering", :action=>"show"}
/*path/edit(.:format) {:controller=>"admin/rendering", :action=>"show"}
/*path {:controller=>"admin/rendering", :action=>"show"}
engine_envs GET /engine/envs/:id(.:format) {:controller=>"engine/envs", :action=>"show"}
PUT /engine/envs/:id(.:format) {:controller=>"engine/envs", :action=>"update"}
jammit /assets/:package.:extension(.:format) {:extension=>/.+/, :controller=>"jammit", :action=>"package"}
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都在击中/engine/envs路线被应用程序捕获所有路线.但是我发现堵塞路线是在发动机后加载的,我不相信那些被抓住了.有没有办法覆盖应用程序路线?
routes ruby-on-rails ruby-on-rails-plugins rails-engines ruby-on-rails-3
我使用jQuery Markitup允许用户输入html ...所以他们可以输入如下内容:
<h1>Foo</h1>
<p>Foobar</p>
Run Code Online (Sandbox Code Playgroud)
但是,我正在观看http://railscasts.com/episodes/204-xss-protection-in-rails-3并决定在输入中尝试这段代码:
<script>alert('test');</script>
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,当我提交表格并刷新页面时,警报框出来了.这是一个安全风险!
这就是我的看法:
<div><%= comment.description.html_safe %></div>
Run Code Online (Sandbox Code Playgroud)
上面呈现任何html,但也容易出现xss.所以我尝试过:
<div><%= html_safe(comment.description).html_safe %></div>
Run Code Online (Sandbox Code Playgroud)
但上面没有渲染任何HTML.它实际上将html显示为文本,这不是所需的行为.
我需要渲染html,同时保护自己不受xss的影响.我该怎么做?
我正在实施一个应用程序来跟踪帖子被查看的次数.但我想保持一种"聪明"的跟踪方式.这意味着,我不想仅仅因为用户刷新浏览器而增加视图计数器.
因此,如果IP和用户代理(浏览器)是唯一的,我决定只增加视图计数器.到目前为止哪个是有效的.
但后来我想.如果Youtube正在这样做,他们有几个视频有数千甚至数百万的视图.这意味着他们在数据库中的视图表将过多地填充IP和用户代理....
这让我假设他们的视频表具有视图的计数器缓存(即views_count).这意味着,当用户点击视频时,将存储IP和用户代理.此外,视频表中的计数器缓存列也会增加.
每次点击视频.Youtube需要查询视图表并计算条目数.这不会大大影响性能吗?
这是他们怎么做的?或者,还有更好的方法?
我的存储桶中的某些文件设置为public-read(ACL).所以我在某处读到设置存储桶策略可以自动将存储桶中的所有文件设置为私有.
bucketname是实际存储桶名称的占位符.我的存储桶政策是:
{
"Version": "2008-10-17",
"Id": "Policy1331182170360",
"Statement": [
{
"Sid": "Stmt1331182162671",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucketname/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
在我的一个控制器中,我有:
s3 = Aws::S3.new(APP_CONFIG['amazon_access_key_id'], APP_CONFIG['amazon_secret_access_key'])
bucket_gen = Aws::S3Generator::Bucket.create(s3, APP_CONFIG['amazon_bucket_name'])
signed_url = bucket_gen.get("#{URI.unescape(URI.parse(URI.escape(@song.encoded_file_url)).path[1..-1])}", 10.minute)
redirect_to signed_url and return
Run Code Online (Sandbox Code Playgroud)
我被重新指挥,但我一直拒绝访问.但是,如果我删除了存储桶策略,我会被重定向到已签名的网址,一切正常.
最初,我认为我签署我的网址的方式存在问题.所以我打开了Amazon Web Console,并手动将文件权限设置为private.对于此测试,我删除了存储桶策略.导航到文件URL(未签名),无法访问.这是正常的.在第二次测试中,我签署了URL并可以访问该文件.这意味着我签约的方式没有错.
存储桶策略和签名网址之间是否存在冲突?
是否适合使用Mail Gun发送新闻通讯(批量电子邮件)?我们目前正在使用Mail Gun发送交易电子邮件(即确认电子邮件)工作得很好!
我们正在查看Campaign Monitor和Mail Chimp的每周电子邮件简报.这些服务更适合这类任务吗?
我发现使用Mail Gun更方便的一点是,它们的API更易于使用.特别是在发送"动态"/更个性化的电子邮件时.例如:
你好Foo,
您的总视频播放次数为1,291次.您有214条评论.
问候,
很棒的网站
另一方面,Campaign Monitor和Mail Chimp提供的UI分析/报告使其更容易阅读,特别是对于非技术人员.这同样适用于创建广告系列和模板.
它很简单,可以与Rails一起使用.由于模板是通过ActionMailer而不是UI创建的(如Campaign Monitor和Mail Chimp所示).
deliver-ability使用其中一项服务,我应该注意的新闻通讯有什么好处吗?
在我们的Rails应用程序中.我们保存模型(视频).我们在该对象上有一个回调:
after_create :send_to_background_job, :if => :persisted?
Run Code Online (Sandbox Code Playgroud)
该方法如下:
def send_to_background_job
Resque.enqueue(AddVideo, self.id)
end
Run Code Online (Sandbox Code Playgroud)
当工人被召唤时.它执行以下操作:
class AddVideo
@queue = :high
def self.perform(video_id)
video = Video.find(video_id)
video.original_file_name
....
Run Code Online (Sandbox Code Playgroud)
Resque-web报告错误:
AddVideo
Arguments
51061
Exception
NoMethodError
Error
undefined method `original_filename' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
这有点奇怪,因为,如果我去Rails控制台寻找这个视频.它确实存在.此外,调用Resque.enqueue(AddVideo, 51061)SECOND时,运行没有任何错误.
就好像在数据库中保存记录所花费的时间要多于创建worker/job所需的时间.但即使这个语句也没有加起来,因为只有在保存对象后,对象才会调用Resque作业.在Rails中,这是通过模型(after_create)中的回调方法完成的.
不知道这是否在这个问题中起作用.在初始化文件中,我有:
Resque.before_fork do
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
Resque.after_fork do
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end
Run Code Online (Sandbox Code Playgroud) 在我的Elastic Beanstalk中 - 容器选项.RACK_ENV设置为staging.
事实上,如果我SSH到EC2实例和做rails console的/var/app/current/,然后键入Rails.env返回staging.
阅读http://www.modrails.com/documentation/Users指南Nginx.html#RackEnv
它表示要设置RACK_ENV变量,因为默认情况下,值为production.
你会认为一切都会有效,除了在Elastic Beanstalk日志中,它说:
[ 2013-11-18 14:28:26.4677 8061/7fb5fe01a700 Pool2/Implementation.cpp:1274 ]: [App 7428 stdout] PG::ConnectionBad (FATAL: database "foobar_production" does not exist
Run Code Online (Sandbox Code Playgroud)
foobar_production数据库不存在,但foobar_staging确实存在.那么为什么Passenger仍然在关注生产环境,何时应该关注分期.