小编Wil*_*ill的帖子

如何在Rails环境中将参数传递给Rake任务?

我能够传递如下参数:

desc "Testing args"
task: :hello, :user, :message do |t, args|
  args.with_defaults(:message => "Thanks for logging on")
  puts "Hello #{args[:user]}. #{:message}"
end
Run Code Online (Sandbox Code Playgroud)

我还能够为Rails应用程序加载当前环境

desc "Testing environment"
task: :hello => :environment do 
  puts "Hello #{User.first.name}."
end
Run Code Online (Sandbox Code Playgroud)

我想做的是能够拥有变量和环境

desc "Testing environment and variables"
task: :hello => :environment, :message do |t, args|
  args.with_defaults(:message => "Thanks for logging on")
  puts "Hello #{User.first.name}. #{:message}"
end
Run Code Online (Sandbox Code Playgroud)

但这不是一个有效的任务调用.有谁知道我怎么能做到这一点?

ruby rake ruby-on-rails

210
推荐指数
5
解决办法
9万
查看次数

究竟什么是Rails 3.0中的Arel?

我知道它是ActiveRecord的替代品,它使用对象而不是查询.

但...

为什么这样更好?

对象/查询会"更容易"创建吗?

它会导致更高效的SQL查询吗?

它会与所有主要数据库兼容吗? - 我认为它会.

使用存储过程会更容易/更难吗?

ruby activerecord ruby-on-rails arel

85
推荐指数
2
解决办法
2万
查看次数

Git - 如何管理不同分支中的构建文件?

一些背景

我一直在使用Git一段时间.我一直在研究的项目在分支/标签方面并不是太复杂.

我决定在工作中使用git-svn.SVN存储库有许多不同的分支.很多这些分支机构都是客户定制的主干版本.

问题

我经常在不同的时间为不同的客户解决问题.所以我一直在分支之间来回切换.问题是,每次我在分支之间切换时,为了测试产品,我必须重建项目.构建需要> 2小时(从头开始):(

我假设有一种方法可以将构建文件存储在分支中customer_a,然后检出customer_b,修改,构建,测试,提交.然后隐藏构建文件并customer_a再次结帐并弹出customer_a存储以返回到我所在的位置.

这仅在跟踪(即添加或提交)构建文件时有效.我不想跟踪构建文件,我绝对不想检查它们.有没有办法为非跟踪文件存储(或做类似的事情)?或者人们用来实现同类型事物的常见做法?

请注意,我们的项目构建方式每个库(其中有数千个)都会构建库文件夹本地的文件,即它们不会移动到项目根目录下的构建文件夹中.所有构建的文件遍布整个地方.

更新中...

所以基于一些评论,我认为我需要举例说明我的问题

这是我的文件夹结构.

branch1/
      src/
         component1/
                    c1.c
         component2/
                    c2.c
      libsrc/
          library1/
                    lib_1.c
          library2/
                    lib_2.c

branch2/
      src/
         component1/
                    c1.c
         component2/
                    c2.c
      libsrc/
          library1/
                    lib_1.c
          library2/
                    lib_2.c
Run Code Online (Sandbox Code Playgroud)

所以问题是,branch1并且branch2具有相同的祖先,但已经分歧了很多.因此,如果我检查branch1并构建它,我将获得二进制文件(例如lib_1.o),我在其中链接Makefile以构建最终的组件二进制文件.

如果我然后checkout branch2进行更改c1.c并运行make,它会尝试链接到branch1(lib_1.o)创建的二进制文件,因为它们仍然存在于上一个分支中构建的目录中.为了避免这种情况,每次切换分支时都需要进行干净的构建(这需要几个小时).

git git-svn

15
推荐指数
1
解决办法
1594
查看次数

为什么Phoenix(ecto/Postgresx)无法在开发中连接

我正在开始我的Elixir/Phoenix之旅并且在我的postgres连接上遇到了一些麻烦.

当我启动我的服务器时,我得到:

 $ mix phoenix.server
 [error] Postgrex.Protocol (#PID<0.214.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.217.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.218.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.211.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.215.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.219.0>) failed to …
Run Code Online (Sandbox Code Playgroud)

elixir boxen ecto phoenix-framework

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

如何通过foreign_to引用的外部属性进行排序,其中有2个外键表的键

我有一个belongs_to与另一个模型有关联的模型,如下所示

class Article
  belongs_to :author, :class_name => "User"
end
Run Code Online (Sandbox Code Playgroud)

如果我想找到作者订购的特定类型的所有文章,我会做类似以下的事情

articles = Article.all(:includes => [:author], :order => "users.name")
Run Code Online (Sandbox Code Playgroud)

但是,如果Article恰好有两个引用User我可以如何排序:author

class Article
  belongs_to :editor, :class_name => "User"
  belongs_to :author, :class_name => "User"
end
Run Code Online (Sandbox Code Playgroud)

我试过了

articles = Article.all(:includes => [:author], :order => "users.name") 
#=> incorrect results
articles = Article.all(:includes => [:author], :order => "authors.name") 
#=> Exception Thrown
Run Code Online (Sandbox Code Playgroud)

我第一次尝试解决方案

半解决方案如下.这并不是很明显,但看着我的日志,我想出来了.

class Article
  belongs_to :editor, :class_name => "User"
  belongs_to :author, :class_name => "User"
end
Run Code Online (Sandbox Code Playgroud)

基本上你需要做以下事情

articles …

ruby activerecord ruby-on-rails

5
推荐指数
2
解决办法
3043
查看次数

为什么我会为某些型号获得"连接被拒绝 - 连接(2)"?

我有一个运行过去90天的rails应用程序突然停止工作.

调试问题我发现我可以从DB读取但不能写入它.至少对于某些型号.

我可以保存一种模型,而Connection refused - connect(2)当我尝试保存它们时,所有其他模型都会返回.

他们上个月都习惯了.我不知道如何确定问题所在.

不幸的是我现在无法远程访问实际的服务器,所以我的调试能力有限.

我能够让一些非技术人员运行简单的命令,虽然这可能有助于识别我的问题.我明天也会在某个时候访问.

1从控制台检查

./script/console
>> a = Post.last.clone
=> #<Post id: nil, title: "test"...
>> a.ex_id = 7
>> a.save
Connection refused - connect(2)
...
...
>> b = Story.last.console
=> #<Story id: nil, title: "test"...
>> a.ex_id = 7
>> a.save
=> true
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这个有用story而不是post.这在许多测试中都是一致的.

2从mysql检查

./script/dbconsole -p
mysql> INSERT INTO Posts (`title`,`body`, `ex_id`) SELECT `title`, `body`, 7 FROM Posts WHERE ID = 1;
Query OK, 1 …
Run Code Online (Sandbox Code Playgroud)

mysql ruby-on-rails

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

当使用/不使用self时调用本地方法的方式不同.为什么?

我有User与之has_many关系的模型UserFilter.UserFilter与...有belongs关系User.

在User模型中,我有一个名为的方法 update_user_filters(filter_params_array)

这种方法user_filters像这样修改

def update_user_filters(filter_params_array)
  new_filters = []
  old_filter = user_filters 

  filters_params_array.each do |filter_params|
    if filter_params[:id].blank? #if the filter does not yet exist
      new_filters << UserFilter.new(filter_params)
    end
  end
  user_filters = new_filters
end
Run Code Online (Sandbox Code Playgroud)

user_filters会将其设置为预期值,但在保存时不会更新user_filters数据库中的值.

但是,如果我将分配更改为以下内容,则确实如此.有人可以解释为什么会这样吗?

self.user_filters = new_filters
Run Code Online (Sandbox Code Playgroud)

请注意,当我user_filters在模型中首次引用时,在db中执行select操作,因此我不确定此本地方法在使用self和不使用时的工作方式不同self

ruby ruby-on-rails

0
推荐指数
1
解决办法
199
查看次数