小编max*_*der的帖子

管理由Git操作创建的schema.rb中的冲突

我创建了一个迁移,运行rake db:migrate,这突破了我的db/schema.rb版本号.然后我做了一个git fetch origin master,看到我的团队成员发生了变化.所以我做了一个git stash和一个git rebase FETCH_HEAD,然后是一个git stash pop.这导致db/schema.rb与版本号冲突.

Upstream>>>
ActiveRecord::Schema.define(:version => 20110930179257) do
===========
ActiveRecord::Schema.define(:version => 20110930161932) do
<<<Stashed
Run Code Online (Sandbox Code Playgroud)

我认为适当的修复方法是手动将版本号增加到高于上游的值.

这是明智的还是坏消息?

谢谢,马克斯

migration git ruby-on-rails

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

创建FactoryGirl对象时绕过Rails验证

我有两个模型(ModelA和ModelB),每个都有FactoryGirl工厂.我希望ModelB的工厂能够(A)创建测试数据,并且(B)构建(不保存到数据库)样本数据以显示给客户.由于我的模型中的Rails验证,我无法让(A)工作.

MODELA:

class ModelA < ActiveRecord::Base
  belongs_to :model_b
  validates_presence_of :model_b
end
Run Code Online (Sandbox Code Playgroud)

ModelA工厂:

FactoryGirl.define do
  factory :model_a do
    some_attr "hello"
    model_b { FactoryGirl.build :model_b }
  end
end
Run Code Online (Sandbox Code Playgroud)

ModelB

class ModelB < ActiveRecord::Base
  has_one :model_a
end
Run Code Online (Sandbox Code Playgroud)

ModelB的工厂

FactoryGirl.define do
  factory :model_b do
    some_attr "goodbye"
  end
end
Run Code Online (Sandbox Code Playgroud)

如果没有验证错误,我无法从这些工厂创建对象:

 ruby> FactoryGirl.create :model_a
 ActiveRecord::RecordInvalid: Validation failed: ModelB can't be blank
Run Code Online (Sandbox Code Playgroud)

似乎FactoryGirl在保存其关联之前尝试保存工厂对象.我意识到我可以让ModelB的工厂创建其关联的ModelA(而不是构建它) - 然而,我将失去能够使用ModelA工厂来构建样本数据或保存测试数据的灵活性.或者,我可以删除验证; 但后来我没有验证.

还有其他选择吗?

ruby-on-rails factory-bot

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

在12因子应用程序中管理配置

我很高兴在Heroku上使用Rails,就像我可以调整Heroku应用程序的配置属性而无需提交更改xyz.yml和重新部署.

在我的Rails应用程序中完全取消Yaml配置文件会很好,并尽可能地依赖于在ENV中存储配置.这与12因素配置原则一致.

但是,从基于Yaml的配置管理切换到基于Heroku/12因子的配置管理有一些权衡.

  • 虽然部署(qa,stage,prod,dev,demo,labs)的增加确实会导致Yaml文件的激增,但是复制粘贴非常容易创建新的配置文件.我没有看到在Heroku中将配置配置文件从一个部署"复制"到另一个部署的方法.
  • 在repo中存储配置数据意味着,在Heroku的情况下,部署和配置以及应用程序都可以在一次操作中完成.如果我要将配置从Yaml文件移到ENV变量中,我将不得不在部署后在单独的步骤中配置我的应用程序.

希望听到那些在私有应用程序中使用过12因子样式配置的人,以及他们如何在许多部署中管理大量配置变量.

  • 您如何快速配置新部署?
  • 你在哪里保留配置变量的权威来源,如果不是回购?你如何在开发者中分发它?

谢谢!

configuration ruby-on-rails heroku 12factor

18
推荐指数
2
解决办法
3203
查看次数

从.screenrc在GNU Screen窗口中运行命令

有没有办法从我的.screenrc向GNU Screen窗口发送一系列命令?看起来这应该很容易做到:

.screenrc:

startup_message off
screen -t "RAILS SERVER"
<send command to last created window> <my alias to cd Rails project>
<send command to last created window> rails s
screen -t "RAILS CONSOLE"
<send command to last created window> <my alias to cd to Rails project>
rails c
Run Code Online (Sandbox Code Playgroud)

我已多次浏览屏幕手册,但找不到任何可能的内容<send command to last created window>.

谢谢,马克斯

gnu-screen

9
推荐指数
2
解决办法
8022
查看次数

Markdown未在嵌入式gist中呈现

当我嵌入它时,我的要点降价不会呈现.这是一个GitHub问题,还是我做错了?

要旨:

https://gist.github.com/3094145

非渲染嵌入式要点:

http://jsfiddle.net/dJnBg/

谢谢!

gist github

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

在rails中,无法覆盖content-disposition文件名

我使用的是Rails 3.1.0.rc8和Chromium 15.0.874.102.

我想设置CSV下载的文件名.我按照这样做方案,但发现自己无法修改filename的的Content-Disposition头.

这是我的代码:

module ActionController 
  module CSVHelper

    def render_csv options={}
      if request.env['HTTP_USER_AGENT'] =~ /msie/i
        headers['Pragma'] = "public"
        headers['Content-Type'] = "text/plain"
        headers['Cache-Control'] = "no-cache, must-revalidate, post-check=0, pre-check=0"
        headers['Expires'] = "0"
      else
        headers['Content-Type'] = "text/csv"
      end

      filename = generate_filename options.delete(:basename)
      headers['Content-Disposition'] = "attachment; filename=#{filename}"
    end

    def generate_filename basename=nil, suffix="csv"
      filename = basename || params[:action]
      filename << ".#{suffix}"
      filename
    end

  end
end    
Run Code Online (Sandbox Code Playgroud)

在我的控制器中:

respond_to do |format|
  format.html
  format.csv do
    render_csv(:basename => "my_filename")
    Rails.logger.debug "HEADERS: #{headers.to_s}" …
Run Code Online (Sandbox Code Playgroud)

fastercsv content-disposition chromium http-headers ruby-on-rails-3

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

Kafka使用者在重新启动之前不会收到消息

我已经尝试了Kafka 0.8.2.2和0.9.0.0,并且两者都看到了相同的问题,这是:

我启动一个新的Zookeeper和Kafka服务器(空数据/日志目录),启动"mytopic"的消费者进程,启动"mytopic"的生产者进程,然后通过生产者发送消息.消费者在重新启动之前不会收到消息.

我尝试使用"最早"和"最新"消费者偏移重置策略来配置消费者.

我的问题是 - 这是预期的行为吗?如果是这样,有没有办法改变它.如果没有,这里发生了什么?

apache-kafka

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

如何检查一个ActiveRecord类是否属于另一个

给定ActiveRecord :: Base的两个子类,如何实现一个检查是否属于另一个的函数?

def ClazzA < ActiveRecord::Base
  belongs_to :clazz_b
end

def ClazzB < ActiveRecord::Base has_many :clazz_a end

def belongs_to? a, b ... end

谢谢!马克斯

activerecord ruby-on-rails model-associations

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

在eclipse中将外部jar添加到android项目中

我正在使用google-api-java-client在eclipse中构建一个简单的Android项目.我正在尝试按照本教程启动并运行它.我在SO中搜索了如何将JAR添加到Eclipse中的Android项目的答案.他们中的大多数建议将JAR添加到lib/Android项目内的文件夹中,然后将这些JAR添加到项目的构建路径中.我做了这两件事.该项目编译良好(无论如何,Eclipse不会抱怨任何错误).但是当我在我的模拟器中运行Android应用程序时,ClassDefNotFoundError每当我尝试实例化google-api-java-clientJAR中的任何类时,我都会得到它.例如

new com.google.api.client.http.apache.ApacheHttpTransport();
Run Code Online (Sandbox Code Playgroud)

提高ClassDefNotFoundError.

以下是导致错误的代码:

package com.mycom.android;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;

public class SearchRunner implements OnClickListener {

    private static final String API_KEY = "AIzaSyA1Mg3xWXfoov4HdPUzYY2NwTxuvCev1-E";
    private static final String PLACES_SEARCH_URL = "";

    @Override
    public void onClick(View v) {
        EditText editText = (EditText) v;
        String searchText = editText.getText().toString();
        runSearch(searchText);
    }

    protected void runSearch(String searchText) {
        new com.google.api.client.http.apache.ApacheHttpTransport();
    }

}
Run Code Online (Sandbox Code Playgroud)

以下是Eclipse LogCat的更完整输出:

12-21 15:42:11.402: E/dalvikvm(3412): Could not find class …
Run Code Online (Sandbox Code Playgroud)

eclipse android

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