我在理解如何seed.rb在rails中使用脚本时遇到了一些困难.
到目前为止,我每次部署应用程序时都使用它来填充数据库.
像这样.
seed.rb
["Video", "Tv"].each do |thing|
Category.create(name: thing)
end
Run Code Online (Sandbox Code Playgroud)
category.rb
class Category < ActiveRecord::Base
validates_uniqueness_of :name
end
Run Code Online (Sandbox Code Playgroud)
现在可以在每次部署或拉取时运行该脚本.开发团队中的任何人现在都可以添加自己的类别,而无需担心重复.
像这样.
人一
Table类别添加到seed.rb.人二
rake db:migrate并rake db:seed确保本地数据库是最新的.rake db:seed正在服务器上运行以确保最新的数据库.这个工作流程是否可以,如果没有,我应该在哪里放置新数据以确保每个开发人员都拥有最新的数据库?
我正在尝试使用带有rails 3.1.0.rc6 的mysql2 gem,但我的mysql客户端遇到了一些问题.
我在尝试启动服务器时收到此消息.
MySQL客户端库版本不正确!这个gem是为5.1.53编译的,但客户端库是5.5.14.(RuntimeError)
如何编译/安装mysql2以便可以使用mysql 5.5.14?
我尝试过gem pristine mysql2没有成功.
我的服务器上有一堆rails应用程序应该可以使用Redis作为缓存引擎.
我是否要为我的每个应用程序启动一个Redis实例,或者Redis是否支持范围界定?
我担心如果我在一个应用程序中删除一个值,那么对于我的所有应用程序,将删除具有相同键的值.
我不例如希望这种事情发生.
应用1
Rails.cache.write("key", "value")
应用2
Rails.cache.read("key") => "value"
应用3
Rails.cache.delete("key")
应用1
Rails.cache.read("key") => nil
几天前,我和我的朋友讨论了使用版本控制系统时提交消息的大小。当他使用较大的提交消息但不那么频繁地提交时,我就有了经常提交和小提交的想法。
我总是听说,至少作为初学者,你应该按照我的方式去做;经常有小的提交消息。如果可能的话,您应该用一句话总结您的提交。
但当我看到像Linus Torvalds这样的专业人士时,我却有相反的感觉。这是他在github 上的地下项目上发布的一条提交消息。
这使得如果它们彼此相差半格以内,则认为它们是相同的。如果您手动编辑压力并将其设置为与样本相同的巴压力,它们可能与最后的毫巴不同,但显然手动输入的气缸压力与样本数据没有显着差异,因此请考虑它是多余的。
我们确实希望手动覆盖气瓶压力优先于样本数据(正如 Dirk 雄辩地指出的那样,一些潜水电脑确实没有非常可靠的样本数据),但同时样本数据也是我们期望的数据相当准确。开始和结束压力覆盖适用于没有样本数据或样本数据由于某种原因完全错误时。
签署人:Linus Torvalds
这是有问题的提交消息。
我查看了自己的提交消息(我有几千条),它们通常总是少于 40 个字符。
有人对这个问题有意见吗?
我有一个非常简单的测试
/** @jsx React.DOM */
var store = require('../simpleStore');
var TestUtils = require('react/addons').addons.TestUtils;
describe("my tests",function(){
it('simple test',function(){
var x=10,
y=20;
expect(x).not.toBe(y);
})
})
Run Code Online (Sandbox Code Playgroud)
只要我不需要TestUtils,测试就可以正常工作.我添加任何node_module引用的那一刻,我开始看到下面的错误
Using Jest CLI v0.8.0, jasmine1
FAIL build/stores/__tests__/simple-test.js
? Runtime Error
Error: ../stores/__tests__/simple-test.js:
../../node_modules/react/addons.js:
../../node_modules/react/lib/ReactWithAddons.js:
../../node_modules/react/lib/LinkedStateMixin.js:
../../node_modules/react/lib/ReactLink.js:
../../node_modules/react/lib/React.js:
../../node_modules/react/lib/ReactDOM.js:
../../node_modules/react/lib/ReactDOMTextComponent.js:
../../node_modules/react/lib/ReactComponentBrowserEnvironment.js:
../../node_modules/react/lib/ReactDOMIDOperations.js:
../../node_modules/react/lib/ReactMount.js:
../../node_modules/react/lib/ReactElement.js: Failed to get mock metadata:
../../node_modules/react/lib/canDefineProperty.js
npm ERR! Test failed. See above for more details.
Run Code Online (Sandbox Code Playgroud)
我敢肯定很多人都在使用开玩笑而且我错过了一些愚蠢的东西......是否有任何想法可以解决这个问题?
我试图在同一关系中关联不同的模型,就像这样;AUser可以有许多不同的朋友,但每个朋友模型在验证和数据方面都是不同的。
User.first.friends # => [BestFriend, RegularFriend, CloseFriend, ...]
Run Code Online (Sandbox Code Playgroud)
每个朋友类都有不同的列,但它们都响应相同的方法#to_s。
class User < ActiveRecord::Base
has_many :friends # What more to write here?
end
class BestFriend < ActiveRecord::Base
belongs_to :user
validates_presence_of :shared_interests # Shared between all friend models
validates_presence_of :favourite_colour # Does only exists in this model
def to_s
"This is my best friend whos favourite colour is #{favourite_colour} ..."
end
end
class RegularFriend < ActiveRecord::Base
belongs_to :user
validates_presence_of :shared_interests # Shared between all friend models
validates_presence_of :address …Run Code Online (Sandbox Code Playgroud) 我正在尝试匹配以下字符串,但没有成功.
到目前为止我已经这么做了.
/\[([^\]]+)(\([^\)]+)/
Run Code Online (Sandbox Code Playgroud)
这是最后一部分不起作用(\([^\)]+).
换一种说法;
var meta = "[ABC DEF](http://google.com)"
这部分有效.
meta.match(/\[([^\]]+)/) => ABC DEF
这不起作用.
meta.match(/\[([^\]]+)(\([^\)]+)/) // => null
这就是我要的.
["ABC DEF", "http://google.com"]
任何人都知道为什么它不起作用?
我想匹配ABC的*ABC*,而不是从**ABC**.
我到目前为止这个;
/[^\*]{1}\*([^\*]+)\*[^\*]+/
Run Code Online (Sandbox Code Playgroud)
要匹配的字符串可以是以下任何一种.
ABC **Don't match this** DEF
ABC *Match this* DEF
*Match this*
**Don't match this**
我有这个红宝石代码,导致postgresql提高column "urls.id" must appear in the GROUP BY。
Song.
joins(:artist).
references(:artist).
where("artists.active = ?", true).
group("songs.id").
includes(:urls)
Run Code Online (Sandbox Code Playgroud)
问题在于添加时Rails正在加入,includes(:urls)而不是运行单独的查询。是否可以强制Rails运行第二个查询来避免此问题?
换一种说法; 我希望Rails在使用JOIN时使用SQL,在使用时使用ActiveRecord::Relation.joins单独的查询ActiveRecord::Relation.includes。
删除where和references方法使一切顺利,但是后来我无法查询Artists表。
错误消息。
SELECT "songs"."id" AS t0_r0, "songs"."artist_id" AS t0_r1, "songs"."title" AS t0_r2, "songs"."grade" AS t0_r3, "songs"."length" AS t0_r4, "songs"."gigs_count" AS t0_r5, "songs"."clicks" AS t0_r6, "songs"."album_cover_id" AS t0_r7, "songs"."created_at" AS t0_r8, "songs"."updated_at" AS t0_r9, "songs"."position" AS t0_r10, "songs"."services" AS t0_r11, "songs"."moved_id" AS t0_r12, "songs"."details_updated_at" AS t0_r13, "songs"."genres_updated_at" …Run Code Online (Sandbox Code Playgroud) 由于它的规范化,我在MySQL数据库方面遇到了一些性能问题.
我使用数据库的大多数应用程序都需要执行一些重型嵌套查询,在我的情况下需要花费大量时间.使用索引运行查询可能需要2秒钟.没有索引约45秒.
几个月前我遇到的一个解决方案就是使用更快,更线性的基于文档的数据库,在我的案例中,Solr作为主数据库.一旦MySQL数据库中的某些内容发生了变化,就会通知Solr.
这非常有用.使用Solr数据库的所有查询只需要大约3 毫秒.
数字看起来不错,但我遇到了一些问题.
MySQL数据库大约200mb,Solr db包含大约1.4Gb的数据.每次我需要更改表/列时,数据库都需要重新编制索引,在此示例中需要花费12个小时.
视图依赖于某个对象.它不关心它自身的对象是Active Record对象还是Solr对象,只要它可以在它上面调用一组属性.
像这样.
# Controller
@song = Song.first
# View
@song.artist.urls.first.service.name
Run Code Online (Sandbox Code Playgroud)
在我的情况下,问题是从Solr返回的数据是这样的平坦.
{
id: 123,
song: "Waterloo",
artist: "ABBA",
service_name: "Groveshark",
urls: ["url1", "url2", "url3"]
}
Run Code Online (Sandbox Code Playgroud)
这迫使我构建一个可以传递给视图的活动记录对象.
我的问题
有没有更好的方法来解决这个问题?某种可以快速处理复杂查询的超级快速主要只读数据库会很好.