我有一个Sinatra应用程序,托管在Heroku上.最近,我一直在从不同的文件夹开发相同的应用程序.它不是一个分支,它只是一个内容相同但代码不同的并行app /目录.我想将这个新应用程序推送到Heroku,覆盖当前存在的应用程序.我不想在本地合并这两个,只是从保持旧的继续.什么是适当的命令序列?我对运行有疑问heroku create,因为这将导致一个新的应用程序.谢谢!
在将模块化Sinatra应用程序部署到Heroku时,我不断收到此错误:
bundler: failed to load command: rackup (/app/vendor/bundle/ruby/2.4.0/bin/rackup)
我试过调整我的config.ru和我的Procfile,没有成功.以下是config.ru的内容:
$LOAD_PATH.unshift(::File.expand_path('lib', ::File.dirname(__FILE__)))
require_relative 'lib/app'
run Tir::App
Run Code Online (Sandbox Code Playgroud)
Procfile:
web: bundle exec rackup config.ru -p $PORT
Run Code Online (Sandbox Code Playgroud)
LIB/app.rb:
require 'sinatra/base'
module Tir
class App < Sinatra::Base
# code
end
end
Run Code Online (Sandbox Code Playgroud)
请指出我正确的方向.
PS.我可以部署应用程序,但在尝试使用Pony gem发送电子邮件时会出现上述错误.
编辑20.07.2018: 我已经调试了这个问题并找到导致崩溃的线路:
https://gist.github.com/abbottjam/248edfd50f094f99b3bf5b1f995fd290#file-static-rb-L15
错误消息现在说:
内部服务器错误:没有将Array隐式转换为String
所以它必须是configure_options下面方法中的代码块.仍然不知道数组 - >字符串转换应该在哪里发生.谢谢.
我已经使用Sublime Text 2中的Package Control安装了Soda Theme,然后通过Preferences - > Settings - User激活它.但它没有得到应用.相反,我的主题现在是Solarized,它在我的Preferences.sublime-settings文件(第3行)的顶部声明:
当我在控制台中查询主题时,输出是正确的:
>>> view.settings().get('theme')
u'Soda Light.sublime-theme'
Run Code Online (Sandbox Code Playgroud)
这也是正确的:
>>> view.settings().get('color_scheme')
u'Packages/Color Scheme - Default/Solarized (Light).tmTheme'
Run Code Online (Sandbox Code Playgroud)
为什么我看到Solarized主题而不是Soda?
谢谢!
我正在创建一个Sinatra应用程序,它采用上传的CSV文件并将其内容放入哈希值.当我在app.rb中引用此哈希时,如下所示:
hash = extract_values(path_to_filename)
我一直收到此错误消息:
用于Hash的未定义方法`bytesize':0x007fc5e28f2b90 #object_id
file:utils.rb位置:bytesize行:335
我在某处读到这是一个Webrick问题.我切换到Thin,错误是一样的.
我的哈希/ CSV文件的大小非常小,所以它不是问题.
我正在使用ruby 1.9.3p374.
谢谢!
尽管有关主题的SO线程很多,但我在解析CSV方面遇到了麻烦.这是从Adwords关键字规划师下载的.csv文件.以前,Adwords可以选择将数据导出为"普通CSV"(可以使用Ruby CSV库进行解析),现在选项可以是Adwords CSV或Excel CSV.这些格式中的两个都会导致此问题(由终端会话说明):
file = File.open('public/uploads/testfile.csv')
=> #<File:public/uploads/testfile.csv>
file.read.encoding
=> #<Encoding:UTF-8>
require 'csv'
=> true
CSV.foreach(file) { |row| puts row }
ArgumentError: invalid byte sequence in UTF-8
Run Code Online (Sandbox Code Playgroud)
让我们改变编码,看看是否有帮助:
file.close
=> nil
file = File.open("public/uploads/testfile.csv", "r:ISO-8859-1")
=> #<File:public/uploads/testfile.csv>
file.read.encoding
=> #<Encoding:ISO-8859-1>
CSV.foreach(file) { |row| puts row }
ArgumentError: invalid byte sequence in UTF-8
Run Code Online (Sandbox Code Playgroud)
让我们尝试使用不同的CSV库:
require 'smarter_csv'
=> true
file.close
=> nil
file = SmarterCSV.process('public/uploads/testfile.csv')
ArgumentError: invalid byte sequence in UTF-8
Run Code Online (Sandbox Code Playgroud)
这是一个不赢的局面吗?我是否必须滚动自己的CSV解析器?
我正在使用Ruby 1.9.3p374.谢谢!
更新1:
使用评论中的建议,这是当前版本:
file_contents = File.open("public/uploads/new-format/testfile-adwords.csv", 'rb').read
require …Run Code Online (Sandbox Code Playgroud) 我想知道Ruby中的规范方法是什么,以创建自定义setter和getter方法.通常情况下,我会这样做,attr_accessor但我是在创建DSL的背景下.在DSL中,setter像这样被调用(使用=符号将创建局部变量):
work do
duration 15
priority 5
end
Run Code Online (Sandbox Code Playgroud)
因此,它们必须像这样实现:
def duration(dur)
@duration = dur
end
Run Code Online (Sandbox Code Playgroud)
然而,这使得实现getter有点棘手:创建一个具有相同名称但没有参数的方法只会覆盖setter.
所以我编写了自定义方法,同时进行设置和获取:
def duration(dur=nil)
return @duration = dur if dur
return @duration if @duration
raise AttributeNotDefinedException, "Attribute '#{__method__}' hasn't been set"
end
Run Code Online (Sandbox Code Playgroud)
这是一个很好的方法吗?以下是测试用例的要点:
谢谢!
我正在尝试将这小块SCSS编译为CSS:
$font-size: 16px;
$em: $font-size / 1em;
$column: 48px;
$gutter: 24px;
$cols1: ( 1 * ($column + $gutter) - $gutter) / $em;
$cols2: ( 2 * ($column + $gutter) - $gutter) / $em;
$cols3: ( 3 * ($column + $gutter) - $gutter) / $em;
$cols4: ( 4 * ($column + $gutter) - $gutter) / $em;
$cols5: ( 5 * ($column + $gutter) - $gutter) / $em;
$cols6: ( 6 * ($column + $gutter) - $gutter) / $em;
$cols7: ( 7 …Run Code Online (Sandbox Code Playgroud)