小编dan*_*ain的帖子

如何在Chef-repo中的Chef cookbook之间共享代码?

我想在厨师回购中分享一些食谱方法.我知道在菜谱级别我可以将代码放在libraries目录中的模块中(参见相关问题).我正在寻找的是类似的东西,但可以在我的厨师仓库的所有食谱中找到.

我能想到几个解决方案:

  • 创建一个gem,安装gem作为Chef run的一部分.这看起来有点矫枉过正.
  • 将文件放在某个文件夹中,然后将该文件夹添加到$LOAD_PATH配方文件中.我有一种感觉不适用于实际部署,因为厨师服务器对回购没有任何了解.
  • 将文件放在某个文件夹中,并将其符号链接到每个cookbook的libraries目录中.

最后一个选项似乎是最可行的.有没有更好/更惯用的方式来做我想要的?

ruby chef-infra

11
推荐指数
1
解决办法
8519
查看次数

Erlang从节点/ Quit shell分离shell而不删除节点

我觉得我错过了一些明显的愚蠢,但我看了一遍,无法找到我的问题的答案.

假设我有一个我用螺纹钢制造的应用程序版本,我就开始了

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?

erlang rebar

10
推荐指数
1
解决办法
3167
查看次数

动态创建has_many或habtm的after_add和after_remove回调?

有没有办法动态添加after_addafter_remove回调现有的has_manyhas_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)

activerecord ruby-on-rails callback has-many-through

7
推荐指数
2
解决办法
1879
查看次数

Erlang EUnit测试模块依赖于库应用程序

我有一个中等版本的应用程序.我最近在发布版本的库应用程序中重构了一些常用功能.这使得我的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(读:它是现实世界的对应物)做了一些非常简单的事情.)

erlang rebar eunit

6
推荐指数
1
解决办法
890
查看次数

Emacs上限锁定次要模式?

在Emacs中是否有一个命令可以打开可能被称为"大写锁定次要模式"的命令?我正在寻找类似的东西M-x toggle-caps-mode,然后我在缓冲区中输入的每个字母都是大写字母,直到我再做M-x toggle-caps-mode一次.

注意:我不是在寻找如何交换上限和控制的指示.实际上这是因为我已经这样做了.我一般都很满意它,但偶尔我会编辑代码,其中有一堆常量全部大写,并且它会成为压低shift键的压力.我知道各种upcase转换功能; 我宁愿不必输入单词,选择它,然后运行upcase-region.

如果重要的话,我正在使用Aquamacs 2.2 w/Emacs 23.3.1.

emacs capslock

5
推荐指数
1
解决办法
982
查看次数

Ruby备份gem - 共享配置?

我正在使用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)

ruby backup configuration dry

5
推荐指数
1
解决办法
1217
查看次数

rspec测试has_many:through和after_save

我有一个(我认为)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)

ruby rspec ruby-on-rails after-save has-many-through

5
推荐指数
1
解决办法
6306
查看次数

Erlang:匹配某些条件的列表中的第一个元素(不评估其余元素)

举个简单的例子,假设我有一个数字列表,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)

erlang list-comprehension list

5
推荐指数
1
解决办法
5617
查看次数

是否有内置的matlab计算二次形式(x'*A*x)?

非常直截了当的问题:给定N×N对称矩阵A和N向量x,是否有内置的Matlab函数来计算x'*A*x?即,而不是y = x'*A*x,有一个功能quadraticformst y = quadraticform(A, x)

显然我可以做y = x'*A*x,但我需要表现,似乎应该有一种方法来利用

  1. A 是对称的
  2. 左右乘数是相同的向量

如果没有一个内置函数,是否有比这更快的方法x'*A*x?或者,Matlab解析器是否足够智能优化x'*A*x?如果是这样,你能指点我在文件中的一个地方验证这个事实吗?

performance matlab linear-algebra quadratic

3
推荐指数
1
解决办法
5948
查看次数

通过以编程方式指定要修改的字段来修改Erlang中的记录

当修改是我们以编程方式指定的字段时,是否有任何相对简单的方法(复制和)修改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 record

3
推荐指数
1
解决办法
567
查看次数