我想在厨师回购中分享一些食谱方法.我知道在菜谱级别我可以将代码放在libraries目录中的模块中(参见相关问题).我正在寻找的是类似的东西,但可以在我的厨师仓库的所有食谱中找到.
我能想到几个解决方案:
$LOAD_PATH配方文件中.我有一种感觉不适用于实际部署,因为厨师服务器对回购没有任何了解.最后一个选项似乎是最可行的.有没有更好/更惯用的方式来做我想要的?
我觉得我错过了一些明显的愚蠢,但我看了一遍,无法找到我的问题的答案.
假设我有一个我用螺纹钢制造的应用程序版本,我就开始了
rel/my_app/bin/my_app start
Run Code Online (Sandbox Code Playgroud)
我让它愉快地开展业务一段时间,然后我想附上一个控制台来检查事情,所以我这样做
rel/my_app/bin/my_app attach
Run Code Online (Sandbox Code Playgroud)
并获得一个shell.我搞砸了,然后当我完成后我想退出shell但让应用程序继续运行.如果我做的^G q还是q().,它带来了整个应用程序.
我也玩过启动应用程序,+Bi以阻止它允许有人意外关闭它,但那么一个人甚至如何退出附加的shell?
有没有办法动态添加after_add和after_remove回调现有的has_many或has_and_belongs_to_many关系?
例如,假设我有模型User,Thing和连接模型UserThingRelationship,User模型是这样的:
class User < ActiveRecord::Base
has_many :user_thing_relationships
has_many :things, :through => :user_thing_relationships
end
Run Code Online (Sandbox Code Playgroud)
我希望能够在一个模块中扩展User,添加:after_add和:after_remove回调User.has_many(:things, ...)关系.即,有类似的东西
module DoesAwesomeStuff
def does_awesome_stuff relationship, callback
# or however this can be achieved...
after_add(relationship) callback
after_remove(relationship) callback
end
end
Run Code Online (Sandbox Code Playgroud)
以便
class User < ActiveRecord::Base
has_many :user_thing_relationships
has_many :things, :through => :user_thing_relationships
does_awesome_stuff :things, :my_callback
def my_callback; puts "awesome"; end
end …Run Code Online (Sandbox Code Playgroud) 我有一个中等版本的应用程序.我最近在发布版本的库应用程序中重构了一些常用功能.这使得我的EUnit测试undef在测试需要库应用程序的任何内容时都会失败.
设置是这样的:
% In apps/utils/src/utils.erl
-module(utils).
-export([foo/0]).
foo() -> "OH HAI".
Run Code Online (Sandbox Code Playgroud)
然后
% In apps/some_app/src/some_app.erl
-module(some_app).
-export([bar/0]).
bar() -> io:format("foo: ~s~n", [utils:foo()]).
% unit tests for bar()
Run Code Online (Sandbox Code Playgroud)
然后单元测试some_app:bar()失败.我正在运行它们rebar eunit skip_deps=true.我正在使用,skip_deps=true因为我的版本使用了一些第三方应用程序(SQL等).
我假设测试开始失败,因为EUnit正在调用没有依赖项的测试中的应用程序?有没有什么办法解决这一问题?我已将.app文件配置为显式声明依赖项.它在发布时运行良好,现在已经部署了大约一天没有问题,但如果我能让测试再次通过,我会感觉好多了:)
(我可以使用一个模拟应用程序来存根utils:foo/0,我可以看到那个特定的理想位置,但在这种情况下看起来有点过分,因为utils:foo/0(读:它是现实世界的对应物)做了一些非常简单的事情.)
在Emacs中是否有一个命令可以打开可能被称为"大写锁定次要模式"的命令?我正在寻找类似的东西M-x toggle-caps-mode,然后我在缓冲区中输入的每个字母都是大写字母,直到我再做M-x toggle-caps-mode一次.
注意:我不是在寻找如何交换上限和控制的指示.实际上这是因为我已经这样做了.我一般都很满意它,但偶尔我会编辑代码,其中有一堆常量全部大写,并且它会成为压低shift键的压力.我知道各种upcase转换功能; 我宁愿不必输入单词,选择它,然后运行upcase-region.
如果重要的话,我正在使用Aquamacs 2.2 w/Emacs 23.3.1.
我正在使用meskyanichi的备用宝石.总的来说,它可以满足我的需求,但我需要多次备份(例如,每小时,每天,每周).配置大致相同,但有一些差异,所以我需要有多个配置文件.我无法找到一种理智的方法来管理配置的常见位(即,不重复公共部分).
配置文件使用了很多块结构,据我所知,每个备份都需要一个单独的配置文件(例如config/backup/hourly.rb,config/backup/daily.rb等).典型的配置文件如下所示:
Backup::Model.new(:my_backup, 'My Backup') do
database MySQL do |db|
db.name = "my_database"
db.username = "foo"
db.password = "bar"
# etc
end
# similar for other config options
end
Run Code Online (Sandbox Code Playgroud)
然后备份执行la bundle exec backup perform -t my_backup -c path/to/config.rb.
我第一次启用公共配置是为了定义我可以从块调用的方法:
def my_db_config db
db.name = "my_database"
# etc
end
Backup::Model.new(:my_backup, 'My Backup') do
database MySQL do |db|
my_db_config db
end
#etc
end
Run Code Online (Sandbox Code Playgroud)
但这失败了undefined method 'my_db_config' for #<Backup::Database::MySQL:0x10155adf0>.
我的目的是让它工作,然后将公共配置功能拆分成我可以require在每个配置文件中的另一个文件.我还尝试使用配置代码创建一个文件并将require其放入模型定义块中:
# common.rb
database MySQL …Run Code Online (Sandbox Code Playgroud) 我有一个(我认为)has_many :through与连接表相对简单的关系:
class User < ActiveRecord::Base
has_many :user_following_thing_relationships
has_many :things, :through => :user_following_thing_relationships
end
class Thing < ActiveRecord::Base
has_many :user_following_thing_relationships
has_many :followers, :through => :user_following_thing_relationships, :source => :user
end
class UserFollowingThingRelationship < ActiveRecord::Base
belongs_to :thing
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
这些rspec测试(我知道这些不一定是好的测试,这些只是为了说明发生了什么):
describe Thing do
before(:each) do
@user = User.create!(:name => "Fred")
@thing = Thing.create!(:name => "Foo")
@user.things << @thing
end
it "should have created a relationship" do
UserFollowingThingRelationship.first.user.should == @user
UserFollowingThingRelationship.first.thing.should == @thing
end
it "should have followers" do
@thing.followers.should …Run Code Online (Sandbox Code Playgroud) 举个简单的例子,假设我有一个数字列表,L我想找到第一个大于某个特定数字的元素X.我可以用这样的列表推导做到这一点:
(mynode@127.0.0.1)24> L = [1, 2, 3, 4, 5, 6].
[1,2,3,4,5,6]
(mynode@127.0.0.1)25> X = 2.5.
2.5
(mynode@127.0.0.1)26> [First | _] = [E || E <- L, E > X].
[3,4,5,6]
(mynode@127.0.0.1)27> First.
3
Run Code Online (Sandbox Code Playgroud)
但这似乎可能非常低效,因为列表可能很长,第一场比赛可能是早期的.所以我想知道是否a)是否有一种有效的方法来做到这一点,在找到第一个匹配后不会评估列表中的其余元素?或者b)当这个被编译时,Erlang是否会优化其余的比较?
这就是我如何实现我在C中寻找的东西:
int first_match(int* list, int length_of_list, float x){
unsigned int i;
for(i = 0; i < length_of_list, i++){
if(x > list[i]){ return list[i]; } /* immediate return */
}
return 0.0; /* default value */
}
Run Code Online (Sandbox Code Playgroud) 非常直截了当的问题:给定N×N对称矩阵A和N向量x,是否有内置的Matlab函数来计算x'*A*x?即,而不是y = x'*A*x,有一个功能quadraticformst y = quadraticform(A, x)?
显然我可以做y = x'*A*x,但我需要表现,似乎应该有一种方法来利用
A 是对称的如果没有一个内置函数,是否有比这更快的方法x'*A*x?或者,Matlab解析器是否足够智能优化x'*A*x?如果是这样,你能指点我在文件中的一个地方验证这个事实吗?
当修改是我们以编程方式指定的字段时,是否有任何相对简单的方法(复制和)修改Erlang中的记录?
例如:
-record(my_record, {foo = 0, bar = 0}).
modify_record(Record, Field, Value) ->
Record#my_record{Field = Value}.
Run Code Online (Sandbox Code Playgroud)
所以,人们可以做类似的事情modify_record(#my_record{foo = 1}, bar, 42),或者,modify_record(some_method_that_returns_a_my_record(), foo, 3.14)
编译类似的东西,我得到错误
field 'Field' is not an atom or _ in record my_record
Run Code Online (Sandbox Code Playgroud)
我意识到有一些关于如何转换到/来自一个名单的例子,但我希望有更直接的东西.
erlang ×4
ruby ×3
rebar ×2
activerecord ×1
after-save ×1
backup ×1
callback ×1
capslock ×1
chef-infra ×1
dry ×1
emacs ×1
eunit ×1
list ×1
matlab ×1
performance ×1
quadratic ×1
record ×1
rspec ×1