我们公司开始使用单一产品,一些由一些Java服务支持的rails应用程序,然后决定他们想要另一种产品,这种产品最初与第一种产品有很大不同,但随着时间的推移,我们已经意识到它们已经开始融合,并且将代码更改为一个需要对另一个进行类似的代码更改以进行新功能/错误修复.这显然是一种痛苦.
在某些情况下,我们拥有共享一些此功能的宝石,但它超越了ruby到javascript,css等.
所以我的任务是将这两个应用程序合并到一个代码库中.我认为最终我们希望它是一个具有基于权限的角色访问权限的应用程序,但这将会更晚.
我第一次想到将它们快速组合在一起就是创建两个rails引擎并在它们之间共享公共库.我认为这是组合代码,查找常见部分和开始共享的最快捷方式.
我的第一个问题是如何在应用程序之间进行路由.一个应用程序使用永远不会更改的单个域名,另一个应用程序具有许多域.有人可以建议我如何将特定请求路由到特定应用程序,以便在共享库的公共代码库时可以保持独立开始吗?
或者,如果有人对如何组合这些应用程序有其他建议,我会全神贯注.
它们都是运行JRUBY 1.5.3的Rails 2.3.10应用程序,但是我们可能会升级到Rails3,如果这会使事情变得更容易或更清晰(即更好的Rack集成)
我没有做任何Rack编程,但从来没有伤害过,如果这将使我们的生活更轻松.
在Rails 3中,我可以这样做:
match "/page(/:section)", :to => 'some_controller#page'
Run Code Online (Sandbox Code Playgroud)
而且两者/page
并/page/some_section
会映射到some_controller#页
在Rails 2.3.x中是否有相同的功能?我似乎找不到它
我目前正在使用两种不同的路由方法,如下所示:
map.page '/page', :action => 'page'
map.page_section '/page/:section', :action => 'page'
Run Code Online (Sandbox Code Playgroud) 我正在使用标准的bundler/capistrano配方,在服务器上安装所有必需的宝石 after deploy:update_code
像魅力一样工作,大大简化了我的生活.
我正在使用Rails 2.3.10并"修补"boot.rb并根据需要创建了preinitializer.
我的问题是,Rails如何知道我的gems驻留在shared/bundle目录中,以及它如何知道使用它们?此目录是否以某种方式自动添加到加载路径?这些宝石如何先于系统宝石?
我正在尝试为json-api找到一个好的反序列化器/反规范化器(事实证明非常困难)。
我遇到了一些例子,其中反序列化过程(基本上只是反规范化关系和展平属性)被定义为异步函数。这是一个这样的例子,但是我发现了很多。
现在,我对node / javascript的理解是,它基于受I / O约束的系统,因此其设计应使操作应为非阻塞的,以便可以在I / O期间安排其他操作,从而获得并发操作。
但是,我不了解的是这样的反序列化器中的用法。反序列化时,我们有完整的有效负载,没有任何I / O发生。我只能猜测作者假设关系查找可以全部同时发生,但是,由于javascript仍然是单线程的,因此我看不到它如何以任何方式提高性能。
在我看来,这只是使确定性操作变得不确定(因为我认为时间表除反序列化之外还可以安排其他操作)。
我在这里想念什么吗?使这种异步方式真的有好处吗?我不是前端(或节点)开发人员,所以我觉得自己缺少了一些东西(因为我已经看到很多在反序列化器中使用过的模式)
如果有任何区别,它将在浏览器(而不是节点后端)中运行。
我刚刚安装了jruby-1.4.0来玩它.我注意到,warbler默认将我的rails部署打包.我的生产使用JRuby的完整-1.3.1(我已经加入到我的lib目录冻结的版本),但莺是增加JRuby的核心 - 1.4当它打包一切.这对我来说有点令人担忧,因为我不想要任何版本问题或冲突,我只想冻结我的jruby版本,以便在我准备升级时必须明确地更改它.有谁知道实现这一目标的最佳方法?
我读过的文档说它将从WARBLER_HOME中取出所有罐子并打包它们,所以我认为jruby-core-1.4就在那里,但事实并非如此.如何从部署中省略这一点,或者具体说"只给我XX版本的jruby"
我通过跑步找到了莺回家:
jruby -S gem which warbler
Run Code Online (Sandbox Code Playgroud)
这使
/opt/local/share/java/jruby/lib/ruby/gems/1.8/gems/warbler-0.9.14/lib/
Run Code Online (Sandbox Code Playgroud)
但它只有一个机架罐,没有提到jruby-core-1.4
有什么想法吗?
我有一个rails应用程序,从一些Java服务加载大量数据.我正在编写一个模块,允许我使用这些数据填充一些选择框,我正在尝试正确包含这些,以便我可以在我的视图中引用它们.这是我的模块
module FilterOptions
module Select
def some_select
return "some information"
end
end
end
Run Code Online (Sandbox Code Playgroud)
我的想法是在我的application_helper中包含FilterOptions,然后我想我可以使用Select::some_select
它来引用我的方法.事实并非如此.我必须include FilterOptions::Select
然后我可以some_select
自己引用该方法.我不希望这样,但我认为对于那些可能不知道some_select
来自我自己的模块的人来说有点混乱.
那么,我如何编写类似公共静态方法的模块方法,这样我就可以包含我的主模块,并使用子模块命名空间引用我的方法 Select::some_select
我有一个关于谷歌的异步分析跟踪器的工作原理.以下代码用于初始化命令数组:
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(
['_setAccount', 'UA-xxxxxxxx-x'],
['_trackPageview']
);
</script>
Run Code Online (Sandbox Code Playgroud)
现在,这是一个标准数组,在加载GA代码后会被替换,并用作存储点击的一种队列.
我的困惑在于想知道如果用户点击导致重新加载的链接(在加载GA javascript之前),这些点击可能会如何持续存在.如果GA代码没有捕获到_gaq对象的那个推送,那么用户点击一个链接并转到一个新页面,这个数组每次都没有重新初始化?
在导致刷新的请求中,javascript变量不会持久存在吗?如果是这种情况,那么我们是否丢失了导致页面重新加载的原始点击?
非常感谢任何解释.
我在建立一个has_many :through
有条件的协会时遇到了问题.我有这个型号:
class Contact < AR
has_many :group_contacts
has_many :groups, :through => :group_contacts, :conditions => {:groups => {:published => true}}
end
Run Code Online (Sandbox Code Playgroud)
当我尝试从联系人实例化一个组时,会出现问题.使用上面的语法,我收到一个错误:
contact.groups.build
=> ActiveRecord::UnknownAttributeError: unknown attribute: groups
Run Code Online (Sandbox Code Playgroud)
但是,当我使用以下语法时,它可以工作:
has_many :groups, :through => :group_contacts, :conditions => ['groups.published = ?', true]
contact.groups.build
=> #<Group id: nil, name: nil, description: nil, created_at: nil, updated_at: nil, published: true>
Run Code Online (Sandbox Code Playgroud)
我在这个问题中看到了对确切问题的引用.据说将为此错误提交一张票(返回前3版本).我找不到任何东西rails 3.0.x
.
我正在使用3.0.8.有没有人发现这个问题?
进一步说明:
我还发现,当我建立群组时,它实际上忽略了我在构建时的关联条件.我上面构建的唯一原因published => true
是因为它是db中的默认值.
这似乎是一种回归,任何人都可以验证这一点吗?
我有两张桌子points
,contacts
而且我试图points.score
按月分组每个联系人的平均值. 请注意,积分和联系人不相关,我只想要在一个月内创建的积分总和除以该月份存在的联系人数量.
所以,我需要总结按created_at月份分组的点数,我需要只计算那个月份的联系人数量.这是最后一部分让我烦恼的部分.我不确定如何在子查询中使用外部查询中的列.我试过这样的事情:
SELECT SUM(score) AS points_sum,
EXTRACT(month FROM created_at) AS month,
date_trunc('MONTH', created_at) + INTERVAL '1 month' AS next_month,
(SELECT COUNT(id) FROM contacts WHERE contacts.created_at <= next_month) as contact_count
FROM points
GROUP BY month, next_month
ORDER BY month
Run Code Online (Sandbox Code Playgroud)
所以,我正在提取我的积分总和的实际月份,同时,得到next_month的开头,这样我就可以说"让我知道他们创建的联系人的数量是<next_month"
但它抱怨说column next_month doesn't exist
这是可以理解的,因为子查询对外部查询一无所知.资格赛points.next_month
也不起作用.
那么有人能指出我如何实现这一目标的正确方向吗?
点
score | created_at
10 | "2011-11-15 21:44:00.363423"
11 | "2011-10-15 21:44:00.69667"
12 | "2011-09-15 21:44:00.773289"
13 | "2011-08-15 21:44:00.848838"
14 | "2011-07-15 …
Run Code Online (Sandbox Code Playgroud) 我还没有真正构建一个应用程序,但我对bind-attr的文档感到困惑.它说你可以这样做:
App.LogoView = Ember.View.extend({
logoUrl: 'http://www.mycorp.com/images/logo.png'
});
Run Code Online (Sandbox Code Playgroud)
使用模板:
<div id="logo">
<img {{bind-attr =logoUrl}} alt="Logo" />
</div>
Run Code Online (Sandbox Code Playgroud)
生产:
<div id="logo">
<img src="http://www.mycorp.com/images/logo.png" alt="Logo" />
</div>
Run Code Online (Sandbox Code Playgroud)
同样地:
App.AlertView = Ember.View.extend({
priority: "p4",
isUrgent: true
});
Run Code Online (Sandbox Code Playgroud)
使用模板:
<div {{bind-attr =priority}}>
Warning!
</div>
Run Code Online (Sandbox Code Playgroud)
生产:
<div class="p4">
Warning!
</div>
Run Code Online (Sandbox Code Playgroud)
Ember如何知道它是src
第一个例子中的class
属性和第二个例子中的属性?除非我在这里遗漏了一些东西,否则这似乎不太可能.
javascript ×2
jruby ×2
activerecord ×1
async-await ×1
binding ×1
bundler ×1
capistrano ×1
ember.js ×1
es6-promise ×1
migration ×1
module ×1
node.js ×1
postgresql ×1
rack ×1
routing ×1
ruby ×1
rubygems ×1
sql ×1
warbler ×1