我遇到的问题是System.getenv()为环境变量返回null.我的密码存储在RELEASE_PASSWORD环境变量中.当我做:
$ echo $RELEASE_PASSWORD
它打印出正确的值,所以我知道变量已设置.
我最初signingConfig signingConfigs.release在发布版本中设置了类型,一切都运行正常,但我需要不同的签名配置,以适应不同的产品风格.如果我对密码进行硬编码,它的工作原理就像它想象的那样.当我尝试从环境变量中读取密码时,事情就变得很糟糕.
这是某种范围问题吗?
这就是我目前所拥有的build.gradle.
android {
...
signingConfigs {
release {
storeFile ...;
keyAlias ...;
storePassword System.getenv("RELEASE_PASSWORD");
keyPassword System.getenv("RELEASE_PASSWORD");
}
unsigned {
keyAlias "";
storePassword "";
keyPassword "";
}
}
buildTypes {
debug {
versionNameSuffix = "-DEBUG"
}
release {
}
}
flavorGroups "storeFront"
productFlavors {
def googleVariable = signingConfigs.release
def amazonVariable = signingConfigs.unsigned
google {
flavorGroup "storeFront"
signingConfig googleVariable
}
amazon {
flavorGroup "storeFront"
signingConfig amazonVariable …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Rails 3中实现一个通用的虚荣URL系统.通用的意思是虚荣网址与特定模型无关.它类似于Vanities gem,我VanityUrlController从所有的虚荣网址中击中了它.不同的是,我不想做,从外部重定向foo.com/username到foo.com/users/1或foo.com/product-name到foo.com/products/1.我想要虚荣网址,并让VanityUrlContoller做一个模仿相应show动作的内部重定向.
我知道我想要将内部重定向分配给哪个控制器和操作,但是实际调度它时遇到问题.这就是我现在所处的位置:
TargetController.new.process("show", request.env)
Run Code Online (Sandbox Code Playgroud)
它似乎开始处理新的"请求",但缺少关键部分......就像实际的请求对象一样.
任何想法或指示将非常感激.
更新:
我在ActionController中遇到了调度方法,这似乎让我更进一步.
TargetController.new.dispatch("show", request)
Run Code Online (Sandbox Code Playgroud)
我有两个问题,1)它被列为私有api方法,所以如果有另一种方法来做到这一点,我宁愿那样,2)即使它正在渲染TargetController的show模板,它是抱怨"缺少模板vanity_urls/show."
UPDATE
以下是我们提出的解决方案的基础知识.我们做了一些其他的事情,比如强制编码和检查其他一些特定于应用程序的东西,但这应该是你需要的所有东西.
这位于routes.rb文件的最底部,因此您的虚荣路线不会破坏您的其他命名路线.
# Vanity routes.
match ':id', :as => 'vanity', :to => proc { |env|
id = env["action_dispatch.request.path_parameters"][:id]
vain_object = <method to find the object you want to display>
if vain_object.nil?
# render your 404 page
'application#404'
else
model = vain_object.class.model_name
# figure out the controller you want to go to
controller = [model.pluralize.camelize,"Controller"].join.constantize …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用设置对象的一些默认值after_initialize.我遇到的问题是无论对象是如何创建的,我都希望调用它.
我的课:
class Foo < ActiveRecord::Base
serialize :data
after_initialize :init
def init
self.data ||= {}
self.bar ||= "bar"
self.baz ||= "baz"
end
end
Run Code Online (Sandbox Code Playgroud)
一切工作正常,如果我打电话Foo.new,Foo.new(:bar => "things")和Foo.create(:baz => 'stuff').然而,当我使用块用create的after_initialize回调没有得到运行.
obj = Foo.create do |f|
f.bar = "words"
f.data = { :attr_1 => 1, :attr_2 => 2 }
end
Run Code Online (Sandbox Code Playgroud)
这只是产生obj.baz=> nil而不是"baz"正确设置其他属性.
我是否因为执行回调的方式而遗漏了某些内容,与使用块调用create并且没有或者是默认值被块阻塞的区别?
UPDATE
发现了这个问题.
事实证明,create使用阻止和不使用调用是微妙的不同.当你在create没有块的情况下调用并且只是传入一个参数哈希时,对于你正在调用的所有意图和目的Foo.new({<hash of argument>}).save,after_initialize回调就像你期望的那样在保存之前执行. …
我遇到了让Rails(3.1.3)在应用程序初始化时加载一些ActiveRecord子类的问题.这是我的目录结构:
- models
- class1.rb # Class1 < ActiveRecord::Base
- class1s
- subclass1.rb # Subclass1 < Class1
- subclass2.rb # Subclass2 < Class1
Run Code Online (Sandbox Code Playgroud)
我正在努力利用Class1.subclasses,但它一直在回归[].添加#{config.root}/app/models/class1s到config.autoload_paths没有帮助,因为这些clases是延迟加载的,并且在我调用之前没有引用子类subclasses,因此它们已被加载.添加路径config.eager_load_paths似乎也不起作用,其行为基于config.cache_classes开发和生产中通常不同的设置.
我希望能够启动rails控制台并查看:
> Class1.subclasses
=> [Subclass1, Subclass2]
Run Code Online (Sandbox Code Playgroud)
现在这是我看到的行为:
> Class1.subclasses
=> []
> Subclass1
=> Subclass1
> Class1.subclasses
=> [Subclass1]
> Subclass2
=> Subclass2
> Class1.subclasses
=> [Subclass1, Subclass2]
Run Code Online (Sandbox Code Playgroud)
现在我被简化为将它放在我的Class1定义的底部,以便在访问Class1类时加载所有子类:
ruby_files_pattern = File.join(Rails.application.config.root, "app", "models", "class1s", "**", "*.rb")
Dir.glob(ruby_files_pattern).each do |file|
ActiveSupport::Dependencies.require_or_load(file)
end …Run Code Online (Sandbox Code Playgroud) 我们正在使用 Yardoc 为许多 gem 和我公司的应用程序创建 HTML 文档。我们还使用 Rubocop 来实现风格指南合规性。
我遇到的问题是我们必须启用/禁用一些方法指标和# rubocop:disable Metrics/AbcSize我们文档中显示的那些评论(等...)。是否有一个插件可以删除这些或一些我可以遵循的指南来创建自己的?