我是系统管理的新手.在Ubuntu上通过puppet安装nginx后,我得到以下输出:
[alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
[warn] 1898#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
[emerg] 1898#0: open() "/var/log/nginx/access.log" failed (13: Permission denied)
Run Code Online (Sandbox Code Playgroud)
如何摆脱所有这些消息?
我不想直接使用命令行(chown/chmod)并在每次创建新服务器时重复它.因此,我在考虑必须添加到木偶清单中的内容.
在这种情况下,最好的系统管理员做法是什么:更改/ var/log/nginx的所有者/权限或将日志存储在不同的位置?如果chown/chmod是要走的路,哪些特定权限可以确保最高级别的安全性?
我尝试了这个,但它没有帮助:
file { '/var/log/nginx':
ensure => directory,
mode => '0755',
owner => 'www-data',
group => 'www-data',
recurse => true
}
Run Code Online (Sandbox Code Playgroud)
编辑:
vagrant@precise64:~$ ps aux | grep [n]ginx
root 1001 0.0 0.1 62908 1388 …Run Code Online (Sandbox Code Playgroud) 似乎有两种完全不同的测试方法,我想引用它们.
问题是,这些意见是在5年前(2007年)提出的,我感兴趣的是,从那以后发生了什么变化以及我应该走哪条路.
理论是测试应该与实现无关.这导致较少的脆弱测试并且实际测试结果(或行为).
使用RSpec,我觉得完全模拟模型来测试控制器的常见方法最终会迫使您过多地研究控制器的实现.
这本身并不算太糟糕,但问题在于它与控制器过多地对齐以决定模型的使用方式.如果我的控制器调用Thing.new,为什么重要?如果我的控制器决定采取Thing.create怎么办?和救援路线?如果我的模型有一个特殊的初始化方法,比如Thing.build_with_foo怎么办?如果我改变实现,我的行为规范不应该失败.
当您拥有嵌套资源并为每个控制器创建多个模型时,此问题会变得更糟.我的一些设置方法最终会长达15行或更长,而且非常脆弱.
RSpec的目的是将您的控制器逻辑与模型完全隔离,理论上听起来不错,但几乎与Rails等集成堆栈相反.特别是如果你练习瘦的控制器/胖模型规则,控制器中的逻辑量变得非常小,并且设置变得很大.
那么BDD想做什么呢?退后一步,我真正想要测试的行为不是我的控制器调用Thing.new,而是给定参数X,它会创建一个新东西并重定向到它.
大卫切林斯基:
这都是权衡利弊.
AR选择继承而非委托的事实使我们处于测试绑定中 - 我们必须与数据库耦合或者我们必须更加密切地与实现相关联.我们接受这种设计选择,因为我们在表现力和干燥方面获益.
在应对困境时,我选择了更快的测试,但代价是更脆弱.你选择较少的脆弱测试,但代价是它们的运行速度稍慢.无论哪种方式,这都是一种权衡.
在实践中,我每天运行数百次(如果不是数千次)测试(我使用自动测试并采取非常精细的步骤)并且我改变我是否使用"新"或"创建"几乎从不.同样由于细化步骤,出现的新模型起初非常不稳定.valid_thing_attrs方法可以最大限度地减少这种痛苦,但它仍然意味着每个新的必填字段意味着我必须更改valid_thing_attrs.
但是如果你的方法在实践中对你有用,那就好了!事实上,我强烈建议您发布一个带有生成器的插件,这些插件可以按您喜欢的方式生成示例.我相信很多人都会从中受益.
瑞恩贝茨:
出于好奇,您在测试/规格中多久使用一次模拟?也许我做错了什么,但我发现它严重限制.自从一个月前切换到rSpec以来,我一直在他们推荐的文档中,控制器和视图层根本没有访问数据库,模型完全被模拟了.这为你提供了一个很好的速度提升并使一些事情变得更容易,但我发现这样做的缺点远远超过了职业选手.自从使用嘲笑以来,我的规格变成了维护噩梦.规范旨在测试行为,而不是实现.我不在乎是否调用了一个方法我只是想确保结果输出是正确的.因为mocking使得规范对于实现很挑剔,所以它使得简单的重构(不改变行为)不可能做到,而不必经常回去并"修复"规范.我非常鄙视规范/测试应涵盖的内容.测试应该只在应用程序中断时中断.这就是为什么我几乎不测试视图层的原因之一,因为我发现它太僵硬了.在视图中更改小东西时,它通常会导致测试中断,而不会破坏应用程序.我发现嘲笑有同样的问题.最重要的是,我今天才意识到,嘲笑/抄袭一个类方法(有时)会在规范之间徘徊.规格应该是自包含的,不受其他规格的影响.这打破了这个规则并导致棘手的错误.我从这一切中学到了什么?在使用模拟的地方要小心.Stubbing并不是那么糟糕,但仍有一些相同的问题.
我花了几个小时从我的规格中删除了几乎所有的模拟.我还使用控制器规范中的"integrate_views"将控制器和视图规范合并为一个.我还为每个控制器规范加载所有灯具,因此有一些测试数据可以填充视图.最终的结果?我的规格更短,更简单,更一致,更不僵硬,并且他们一起测试整个堆栈(模型,视图,控制器),因此没有错误可以穿过裂缝.我不是说这对每个人来说都是"正确"的方式.如果您的项目需要一个非常严格的规范案例,那么它可能不适合您,但在我的情况下,这比使用模拟之前的世界更好.我仍然认为存根是一个很好的解决方案,所以我仍然这样做.
我有一个日期变量,以'YYYY-mm-dd'格式存储为String.如果该日期尚未通过,最好的检查方法是什么?
有没有# encoding: UTF-8自动添加到每个Ruby文件的gem ?
或者是否有任何其他方法可以防止invalid multibyte char (US-ASCII)整个Ruby on Rails项目中的错误(不仅仅是在单个类中)?
以下代码在HTML中留下空格:
= link_to "Login", "#"
Run Code Online (Sandbox Code Playgroud)
通常,HAML允许通过在行尾添加">"来删除它,例如:
%input#query{:type => "text", :value => "Search"}>
Run Code Online (Sandbox Code Playgroud)
但是,当插入Rails代码时,这似乎是不可能的.
我该如何解决?
我是Ruby on Rails的新手,我的问题是关于应用程序设计,基于Rails 3.在Rails上创建标准网站(如博客)的互联网上有很多数据,但我的应用程序需要的不仅仅是"发布并阅读"我不知道如何实现这一点.
想法:
问题:
如何使用YAML文件而不是seeds.rb将初始数据加载到数据库中?
我有:
form.input :duration, as: select, collection: {}
Run Code Online (Sandbox Code Playgroud)
我需要:
<option value="" data-price="XXX"></option>
Run Code Online (Sandbox Code Playgroud)
Rails不支持选项标记的HTML5数据属性.Formtastic 建议为此创建一个辅助方法.
Formtastic自述文件描述了如何扩展输入标签.但是,在select_input.rb中,我找不到任何会影响option标签的方法.那么,我该怎么做?
此外,我发现enhanced_select gem正是我所需要的,但我无法使其与formtastic一起工作.
我有一个条目ID,popularity必须增加一个.
一个简单的解决方案如下所示:
Tag.find(id).increment!(:popularity)
Run Code Online (Sandbox Code Playgroud)
但是它似乎效率不高,因为我从数据库中选择了整个条目(*)(即使我根本不需要它),然后执行第二个查询来更新它.
有没有更有效的方法来做到这一点?我认为,一个更新语句(没有"select")应该足够了,但是我该怎么写呢?